【问题标题】:cross domain posts to ASP.Net MVC app跨域发布到 ASP.Net MVC 应用程序
【发布时间】: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 应用程序的任何建议?

【问题讨论】:

    标签: jquery asp.net-mvc architecture cross-domain jsonp


    【解决方案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。你可能想看看下面的 stackoverflow 帖子:ASP.net MVC returning JSONP

      【讨论】:

        【解决方案4】:

        你有两个选择,在 dataType 中你可以用 text 或 jsonp 代替 json。如果你给我们和你发送的数据的例子,这将更容易。

        问候

        【讨论】:

          【解决方案5】:

          如果您可以控制所包含的 JS 库,最好的方法是使用众多跨域通信库之一。客户端(在您的情况下为 MVC 应用程序)必须将其配置为接受此类请求,在大多数情况下,这意味着在接受端具有相同的库。

          目前我发现的最好的一个是 EasyXDM。没有太多限制,并且会根据浏览器功能进行自我调整。但是你必须在两个相互通信的应用程序上都有它。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-11-12
            • 2011-01-02
            • 1970-01-01
            • 2014-11-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多