使用web api访问Control-Allow-Origin请求

时间:2016-07-20 22:54:34

标签: angularjs asp.net-web-api2

我们正在使用AngularJS前端和Web Api后端的Intranet应用程序。它基本上是对现有ASP.NET / WCF应用程序的重新设计,并且仅供我们的一些员工使用。

我们原本打算使用Windows身份验证在此版本中强制执行某些安全性(旧版本没有),并且我们在使用Internet Explorer以外的浏览器时遇到了一些问题。例如,Chrome总是会返回401-Unauthorized错误。

我已被指示暂时跳过安全功能(是的,我知道,这不是一个好主意)所以我已经禁用它们但现在我在尝试通话时看到错误到API(在一个单独的项目中),但在Chrome中,而不是在IE中。

XMLHttpRequest无法加载http://localhost:62415/api/Emails。 No' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' http://localhost:50900'因此不允许访问。响应的HTTP状态代码为401.

我们在API项目中启用了CORS,所以我不确定我需要在这做什么。我们在本地开发中使用localhost,但在质量检查和生产中,这些网站将在同一域中使用具有不同子域的URL。

我在项目中使用了一个Startup类,它有这个方法:

public void Configuration(IAppBuilder app)
    {
        var config = new HttpConfiguration();

        WebApiConfig.Register(config);
        app.UseCors(CorsOptions.AllowAll);
        app.UseWebApi(config);
    }

我一定错过了什么。我们最初在WebApiConfig中使用了此代码,但恢复它并没有解决任何问题:

var cors = new EnableCorsAttribute("*", "*", "*");

cors.SupportsCredentials = true;
config.EnableCors(cors);

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

不需要添加:

  

var cors = new EnableCorsAttribute(" "," "," *");   config.EnableCors(CORS);

出于安全原因,浏览器会限制从脚本中发起的跨源HTTP请求。 例如,XMLHttpRequest遵循同源策略。因此,使用XMLHttpRequest的Web应用程序只能向其自己的域发出HTTP请求。 但是,您可以通过以下方式传递:

  
      
  • 在nuget中安装Microsoft.Owin.Cors包
  •   
  • 在Startup.cs中添加此方法
  •   
    public void Configuration(IAppBuilder app)
        {
            app.UseCors(CorsOptions.AllowAll);
        }