我们正在使用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);
感谢任何帮助。
答案 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);
}