允许对ASP.NET脚本服务的跨域请求

允许对ASP.NET脚本服务的跨域请求,asp.net,web-services,cross-domain,jsonp,scriptservice,Asp.net,Web Services,Cross Domain,Jsonp,Scriptservice,我已经使用[ScriptService]属性启动并运行了一个ASP.NET Web服务。从这篇文章中我读到: 默认情况下,ASP.NET不允许JSONP请求(通过注入DOM来拒绝跨域请求)。它通过采取两种措施来实现这一点: 1) 仅接受POST请求(通过始终执行GET的脚本注入) 2) 拒绝发送“Content-type:application/json”(浏览器不会发送)以外的HTTP头内容类型的连接 我熟悉跨域问题,我知道什么是JSONP,我完全理解ASP.NET在默认情况下以这种方式受到

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

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

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

我熟悉跨域问题,我知道什么是JSONP,我完全理解ASP.NET在默认情况下以这种方式受到限制的原因

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

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

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


总而言之:我需要一个良好的实践,通过JSON为公共Web服务的ScriptingService启用跨域请求。我的意思是,必须有一种方法使Web服务公开,这就是大多数Web服务的目的?

使用传统的ASMX服务进行类似的操作似乎是一个失败的目标。由于其可扩展性,很容易实现。因此,如果您需要最佳实践,那么WCF就是您应该在.NET平台上构建web服务的技术

或者,如果您目前确实负担不起迁移到.NET 3.5的费用,您也可以编写一个自定义http处理程序(
.ashx
)来完成这项工作。

jQuery ajax()函数确实具有“跨域”属性

粘贴自

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

我想避免WCF,原因有两个:1)Web服务从一段时间以来就以纯xml Web服务的形式存在,而且相当成熟,我通过xml和类proxys让客户机使用该Web服务2)该服务在mono下运行,而mono并没有这样做WCF@Dyna,1)在现有ASMX web服务周围添加WCF包装器。为旧客户端保留现有ASMX服务。2) WCF在Mono上运行良好(不是所有的绑定,但是如果您坚持使用标准的东西,它应该可以工作)。但我理解你的观点。好的,在本例中,一个简单的
.ashx
将非常有用。如果您将dataType:jsonp指定为.ajax()的选项,它会自动执行跨域jsonp请求。只是在您不使用jsonp的情况下提供。让我再挖一些。我最近遇到了这个问题。另一方面,我们正在发送自定义标题,您提到您不想强迫您的用户/客户这样做。