页面上的服务调用生成区域安全性错误

时间:2017-06-12 22:54:06

标签: asp.net angularjs rest webmethod

在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")]

没有运气。

错误

F12 Tools Error

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

1 个答案:

答案 0 :(得分:1)

您需要设置网页的内容安全策略(CSP),以便浏览器不会阻止您的{内部网站休息服务网址。

以下是链接,这些链接,帮助我解决了这个问题: 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标头完成策略设置策略。我正在处理类似的问题。我错过了一些东西,但我认为这是正确的方向。我需要别人的意见,因为这并不能解决问题。但它离得更近了。