我已经使用ScriptService属性启动并运行了一个ASP.NET the服务。根据我从这篇文章中读到的内容:
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来拒绝跨域请求。Its通过采取两项措施来实现这一目标:
1)只接受POST请求(脚本注入通过总是执行GET) 2)拒绝发送HTTP头内容类型的连接,而不是" Content-type : application/json“(浏览器不会发送)。
我熟悉跨域的问题,我知道JSONP是什么,我完全理解为什么ASP.NET在默认情况下会受到那样的限制。
但是现在,我有了我的open服务,这是一个公共的服务,应该对每个人开放。因此,我明确地需要通过Javascript启用对我的Webservice的跨域请求,这样外部网站就可以通过我的webservice从jquery等检索数据。
我已经介绍了通过GET允许请求的步骤(1),方法是这样修改ScriptMethod属性: ScriptMethod(UseHttpGet=true)。我已经和jQuery确认过,GET请求现在可以工作了(在相同的域上)。但是如何找到固定点(2)呢?
我知道一些浏览器支持Allow-Origin-*头,但afaik还不是标准的,我不想强迫我的用户/客户修改他们的HTTP头来使用我的yet服务。
总结一下:我需要一个好的实践,通过JSON为公共via服务的ScriptingService启用跨域请求。我的意思是,必须有一种方法来拥有一个Webservice公共,这就是大多数webservices的内容?
发布于 2011-07-20 00:27:34
使用遗留的ASMX服务来做这样的事情似乎是失败的。由于其可扩展性,Try WCF很容易成为JSONP enabled。因此,如果您正在寻求最佳实践,那么WCF是您应该在.NET平台上构建web服务的技术。
或者,如果你现在真的负担不起迁移到HTTP3.5,你也可以编写一个自定义的.NET处理程序(.ashx)来完成这项工作。
发布于 2011-07-20 00:35:13
jQuery ajax()函数有一个'crossDomain‘属性。
从jQuery.ajax()粘贴
crossDomain (新增1.5)默认值:同域名请求为false,跨域请求为true如果您希望在同一个域名上强制crossDomain请求(如JSONP),请将crossDomain的值设置为true。例如,这允许服务器端重定向到另一个域
https://stackoverflow.com/questions/6750551
复制相似问题