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



我正在开发一个应用程序,在该应用程序中,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。没有太多限制,并根据浏览器功能进行调整。但你必须在两个相互通话的应用程序上都有它。

相关内容

  • 没有找到相关文章

最新更新