IE9,IE8与AngularJS CORS返回"访问被拒绝" - ASP.NET WebApi

Bri*_*ten 6 javascript c# asp.net-web-api angularjs

在IE8和9中,当我正在进行CORS webapi调用时,我收到以下JavaScript错误:

Error: Access is denied.
{
  [functions]: ,
  description: "Access is denied.",
  message: "Access is denied.",
  name: "Error",
  number: -2147024891
}
Run Code Online (Sandbox Code Playgroud)

我设置了像这里描述的WebApi http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api

所以WebApi包含:

  public static class WebApiConfig
  {
      public static void Register(HttpConfiguration config)
      {
          config.EnableCors(new EnableCorsAttribute("*", "*", "*"));
      [...]
Run Code Online (Sandbox Code Playgroud)

我的测试AngularJS App:

  <!DOCTYPE html>
  <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ng="http://angularjs.org" ng-app="app">
  <head>
      <title>test</title>
      <script src="Scripts/angular.js"></script>
      <script src="app.js"></script>
  </head>
  <body>
      <div ng-controller="testController as vm">
          {{vm.test}}
          {{vm.data}}
      </div>
  </body>
  </html>
Run Code Online (Sandbox Code Playgroud)

app.js:

  var app = angular.module('app');

  app.controller('testController', function ($http) {
      var vm;
      vm = this;

      vm.test = "bla non no ";
      vm.data = null;

      $http.defaults.headers.common['Authorization'] = 'a token'

      return $http({
          method: 'GET',
          data: null,
          url: 'http://webapi.com/api/controller/getactionmethod/',
      }, function (data) {
          console.log("bla");
      }).success(function (data, status, headers, config) {
          console.log("bla a");
          vm.data;
      });


  });
Run Code Online (Sandbox Code Playgroud)

上面的代码/ webapi调用适用于chrome和IE 10. IE10打印:

SEC7118:用于http://webapi.com/api/controller/getactionmethod/的 XMLHttpRequest 需要跨源资源共享(CORS).SEC7119:用于http://webapi.com/api/controller/getactionmethod/的 XMLHttpRequest 需要CORS预检.

我真的被卡住了,不知道我能做些什么.有任何想法吗?

Bri*_*ten 2

AngularJS v1.2.23 不支持 IE8 或 IE9 的 CORS 请求。但 IE8/9 对 CORS 的支持仅限于 XDomainRequest 对象。另请参阅http://msdn.microsoft.com/en-us/library/ie/cc288060(v=vs.85).aspx

我尝试修改 angularjs 库,如下所述http://samuellam.wordpress.com/2013/08/03/ie-89-cors-support-in-angular-js/

但我注意到我无法使用 XDomainRequest 请求发送自定义标头。因此,我最终将项目部署在具有相同 ip 的同一台计算机上,这适用于 IE8 和 9,这实际上只是一种解决方法。

http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx