我正在开发一个应用程序,在该应用程序中,HTML和javascript块被传递到不同的客户端。我可以通过在web配置文件中添加以下内容来获取html/javascript块:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="POST, GET, OPTIONS" />
</customHeaders>
</httpProtocol>
这对做GETS非常有效。我遇到的问题是使用jQuery:跨域执行POST
$.ajax(
{
type: 'POST',
url: url,
crossDomain: true,
data: JSON.stringify(data),
dataType: 'json',
contentType: 'application/json',
success: function(responseData, textStatus, jqXHR)
{
alert('Success');
},
error: function (responseData, textStatus, errorThrown)
{
alert('POST failed.');
}
});
我会有很多客户使用我的应用程序(希望如此)。我曾想过使用代理,但我无法控制客户端服务器,因此无法安装httpHandler作为代理。
关于如何将来自不同客户端的json数据跨域POST到我的ASP.Net MVC应用程序,有什么建议吗?
我篡改了ajax调用,它似乎正在工作(与上面的ajax调用相比):
$.ajax(
{
type: 'POST',
url: url,
crossDomain: true,
data: data,
dataType: 'json',
success: function(responseData, textStatus, jqXHR)
{
alert('success');
},
error: function (responseData, textStatus, errorThrown)
{
alert('POST failed.');
}
});
我删除了"contentType:'application/json'"one_answers"json.stringfy(…)"调用,我可以发布到服务器。
我不知道如何解释它为什么有效。有什么想法吗?是否存在任何安全问题?我在我的笔记本电脑上做这一切。我通过IIS 7建立了两个不同的网站。这会有什么不同吗?
在内部,JSONP响应(跨域请求的默认类型)是通过注入指向URL的<script>
标记来获取的。因此,JSONP只能使用GET
方法。其他方法将被忽略,并返回到GET
。
当您将crossDomain属性指定为"true"时,dataType属性将设置为jsonp。然而,您需要一种在MVC端处理这个jsonp的方法。您可能想看看以下stackoverflow文章:ASP.net MVC返回JSONP
您有两个选项,在dataType中,您可以放置text或jsonp而不是json。如果你给我们一个你正在发送的数据的例子,这将更容易。
问候
如果您可以控制所包含的JS库,最好的方法是使用许多跨域通信库中的一个。客户端(在您的案例中是MVC应用程序)必须将其配置为接受此类请求,在大多数情况下,这意味着在接受端具有相同的lib。
到目前为止,我发现最好的是EasyXDM。没有太多限制,并根据浏览器功能进行调整。但你必须在两个相互通话的应用程序上都有它。