跨域发布到 ASP.Net MVC 应用程序

Posted

技术标签:

【中文标题】跨域发布到 ASP.Net MVC 应用程序【英文标题】:cross domain posts to ASP.Net MVC app 【发布时间】:2012-02-19 02:15:39 【问题描述】:

我正在开发一个应用程序,其中 htmljavascript 块被传递到不同的客户端。我可以通过将以下内容添加到 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 的 &lt;script&gt; 标记来获取 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 mvc 文件跨域上传,接收返回结果

在 ASP.Net 5 / Core 中启用跨域资源共享 (CORS)

用户访问页面时如何动态缩放整个 ASP.Net MVC 应用程序

ASP.NET MVC 实现AJAX跨域请求方法《1》

AJAX跨域调用ASP.NET MVC或者WebAPI服务的解决方案

jQuery+ASP.NET MVC基于CORS实现带cookie的跨域ajax请求