【问题标题】:Service Call on Page Generates Zone Security Error页面上的服务调用生成区域安全错误
【发布时间】:2017-06-12 22:54:06
【问题描述】:

在 ajax 调用时收到此错误

WebSocket 错误:SECURITY_ERR,不允许跨区域连接

还返回了 500 错误代码在进一步测试后,我能够得到其他似乎与错误无关的响应。请参阅下面的报告错误的位置。

来自这个 Angular 调用

$http.post("Status.aspx/GetDataAsync", {})
     .then(function(response){ $scope.theData = data;},
           function(response){ $scope.result  = "Error!";}
     );

当试图调用WebMethod 后面的页面代码时,这很明显也会对其他网络服务进行网络服务调用

[System.Web.Services.WebMethod]
public static async Task<string> GetDataAsync()
{ 
   var httpresult = await (new HttpClient()).GetAsync("{Internal site rest service Url}");
   return await httpresult.Content.ReadAsStringAsync();
}

这让我想起了一个旧的 Silverlight 跨域问题调用......但我离题了。

问题 区域问题可以解决还是必须直接调用休息服务?


尝试在方法级别使用CORS(参见Enabling Cross-Origin Requests (CORS)),例如

 [System.Web.Services.WebMethod]
 [EnableCors("AllowAllOrigins", "AllowHeaders", "AllowAllMethods")]

运气不好。


错误

这是在 Edge(和 IE)上的 F12 工具中发现错误的地方。 Chrome 未报告此问题。

【问题讨论】:

    标签: asp.net angularjs rest webmethod


    【解决方案1】:

    您需要设置页面的内容安全策略 (CSP),以便您的 {Internal site rest service Url} 不会被浏览器阻止。

    以下是帮助我解决此问题的组合链接: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/connect-src http://caniuse.com/#feat=contentsecuritypolicy

    对于 MVC,我在 web.config 中放置了以下内容:

        <httpProtocol>
          <customHeaders>
            <add name="Content-Security-Policy" value="connect-src 'self' wss://localhost:7717" />
          </customHeaders>
        </httpProtocol>
    

    然后我能够创建到 wss://localhost:7717 的 websocket 连接,但无法连接到任何其他端口。

    浏览器会阻止此类请求以防止跨区域脚本攻击,因此您需要您的页面设置策略,通过 http 标头完成。我正在研究类似的问题。我错过了一些东西,但我认为这是正确的方向。我需要其他人的意见,因为这并不能完全解决问题。不过,它更近了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-26
      • 2020-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多