我已经使用[ScriptService]属性启动并运行了一个ASP.NET Webservice。从我从这篇文章中读到的内容:
ASP.NET默认情况下不允许JSONP请求(通过拒绝跨域请求注入DOM。它通过采取两种措施来实现:
1)只接受POST请求(脚本注入总是通过GET) 2)拒绝发送HTTP头的连接内容类型不是“Content-type:application / json”(浏览器不会发送)。
我熟悉跨域问题,我知道JSONP是什么,我完全理解为什么ASP.NET默认以这种方式受到限制。
但是现在,我的网络服务是公开的,应该向所有人开放。所以我明确需要通过Javascript启用跨域请求到我的Web服务,这样外部网站就可以通过我的web服务从jquery等中检索数据。
我已经介绍了步骤(1),通过以下方式修改ScriptMethod属性来允许通过GET发出请求:[ScriptMethod(UseHttpGet = true)]。我已经检查过jQuery,GET请求现在可以工作(在同域上)。但是如何解决问题(2)?
我知道一些浏览器支持的Allow-Origin- *标题,但是它尚未标准化,我不想强迫我的用户/客户修改他们的HTTP标头以使用我的网络服务。
总结一下:我需要通过JSON为公共Web服务启用ScriptingService的跨域请求。我的意思是必须有一种公开Web服务的方式,这就是大多数网络服务的意义所在?
答案 0 :(得分:0)
使用旧版ASMX服务这样的事情似乎是一个失败的原因。 Try WCF由于其可扩展的性质,很容易JSONP enabled。因此,如果您要求最佳实践,WCF就是您应该在.NET平台上构建Web服务的技术。
或者,如果你现在真的无力迁移到.NET 3.5,你也可以编写一个自定义的http处理程序(.ashx
)来完成这项工作。
答案 1 :(得分:0)
jQuery ajax()函数确实有一个'crossDomain'属性。
粘贴crossDomain(已添加1.5) 默认值:对于同域请求为false,对于跨域请求为true 如果要在同一域上强制执行跨域请求(例如JSONP),请将crossDomain的值设置为true。例如,这允许服务器端重定向到另一个域