跨域发布到 ASP.Net MVC 应用程序
Posted
技术标签:
【中文标题】跨域发布到 ASP.Net MVC 应用程序【英文标题】:cross domain posts to ASP.Net MVC app 【发布时间】:2012-02-19 02:15:39 【问题描述】:我正在开发一个应用程序,其中 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 数据跨域发布到我的 ASP.Net MVC 应用程序的任何建议?
【问题讨论】:
【参考方案1】:我摆弄了我的 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'" 和 "JSON.stringify(...)" 调用,我可以发布到服务器了。
我不确定如何解释它为什么起作用。有任何想法吗?有没有安全问题?我在我的笔记本电脑上做这一切。我通过 IIS 7 设置了 2 个不同的网站。这会有所不同吗?
【讨论】:
需要注意的是,如果发送域是https,那么接收站点也必须是https。【参考方案2】:在内部,通过注入指向 URL 的 <script>
标记来获取 JSONP 响应(跨域请求的默认类型)。因此,JSONP 只能使用 GET
方法。其他方法将被忽略并回退到GET
。
【讨论】:
【参考方案3】:当您将 crossDomain 属性指定为“true”时,dataType 属性将设置为 jsonp。但是在 MVC 端,您将需要一种方法来处理此 jsonp。你可能想看看下面的 *** 帖子:ASP.net MVC returning JSONP
【讨论】:
【参考方案4】:你有两个选择,在 dataType 中你可以用 text 或 jsonp 代替 json。如果你给我们和你发送的数据的例子,这将更容易。
问候
【讨论】:
【参考方案5】:如果您可以控制所包含的 JS 库,最好的方法是使用众多跨域通信库之一。客户端(在您的情况下为 MVC 应用程序)必须将其配置为接受此类请求,在大多数情况下,这意味着在接受端具有相同的库。
目前我发现的最好的一个是 EasyXDM。没有太多限制,并且会根据浏览器功能进行自我调整。但是你必须在两个相互通信的应用程序上都有它。
【讨论】:
以上是关于跨域发布到 ASP.Net MVC 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
在 ASP.Net 5 / Core 中启用跨域资源共享 (CORS)
用户访问页面时如何动态缩放整个 ASP.Net MVC 应用程序