0

我已经使用 [ScriptService] 属性启动并运行了一个 ASP.NET Web 服务。从我从这篇文章中读到的内容:

http://weblogs.asp.net/scottgu/archive/2007/04/04/json-hijacking-and-how-asp-net-ajax-1-0-mitigates-these-attacks.aspx

默认情况下,ASP.NET 不允许 JSONP 请求(通过拒绝跨域请求注入 DOM。它通过采取 2 种措施来做到这一点:

1) 仅接受 POST 请求(通过始终执行 GET 的脚本注入) 2) 拒绝发送 HTTP 标头 Content-type 而非“Content-type: application/json”(浏览器不会发送)的连接。

我熟悉跨域问题,我知道 JSONP 是什么,我完全理解为什么 ASP.NET 默认以这种方式受到限制。

但是现在,我的网络服务是公开的,应该对所有人开放。因此,我明确需要通过 Javascript 向我的 Web 服务启用跨域请求,以便外部网站可以通过我的 Web 服务从 jquery 等中检索数据。

我已经介绍了步骤 (1) 以通过以下方式修改 ScriptMethod 属性来允许通过 GET 请求:[ScriptMethod(UseHttpGet=true)]。我已经检查了 jQuery,GET 请求现在可以工作(在同一域上)。但是如何到达固定点(2)?

我知道一些浏览器支持的 Allow-Origin-* 标头,但它还不是标准的,我不想强​​迫我的用户/客户修改他们的 HTTP 标头以使用我的 web 服务。

总结一下:我需要良好的实践来通过 JSON 为公共 Web 服务启用 ScriptingService 的跨域请求。我的意思是必须有一种方法可以公开 Web 服务,这就是大多数 Web 服务的意义所在?

4

2 回答 2

0

jQuery ajax() 函数确实有一个“crossDomain”属性。

从jQuery.ajax()粘贴

crossDomain(添加 1.5) 默认值:同域请求为 false,跨域请求为 true 如果您希望在同一域上强制执行跨域请求(例如 JSONP),请将 crossDomain 的值设置为 true。例如,这允许服务器端重定向到另一个域

于 2011-07-19T16:35:12.730 回答
0

像这样使用传统的 ASMX 服务似乎是一个失败的原因。试试 WCF,由于它的可扩展性,它可以很容易地启用 JSONP。因此,如果您寻求最佳实践,WCF 是您应该在 .NET 平台上构建 Web 服务的技术。

或者,如果您现在真的无法负担迁移到 .NET 3.5 的费用,您也可以编写一个自定义 http 处理程序 ( .ashx) 来完成这项工作。

于 2011-07-19T16:27:33.957 回答