我正在尝试使用CORS来处理新的WebAPI项目。该项目只是使用ActiveDirectoryBearerAuthentication
的默认WebAPI模板(即具有MVC和WebAPI引用)。
每当我尝试向API发出请求时,都会遇到以下错误:
XMLHttpRequest cannot load https://localhost:44385/api/values. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://localhost:44369' is therefore not allowed access.
我已经安装了Microsoft.Owin.Cors和Microsoft.AspNet.WebApi.Cors。
我的WebApiConfig是这样的:
public static void Register(HttpConfiguration config)
{
config.EnableCors();
....
My Startup.Auth就是这样:
public void ConfigureAuth(IAppBuilder app)
{
app.UseCors(CorsOptions.AllowAll);
app.UseWindowsAzureActiveDirectoryBearerAuthentication(
....
网络解决方案说要添加:
<customHeaders>
<!-- Adding the following custom HttpHeader will help prevent CORS from stopping the Request-->
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
到web.config。但是,无论是否安装Microsoft.AspNet.WebApi.Cors
,都可以执行此操作。
答案 0 :(得分:1)
要仅允许单个域,您可以执行以下操作:
<system.webServer>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
<clear />
<add name="Access-Control-Allow-Origin" value="http://www.myalloweddomain.com" />
</customHeaders>
</httpProtocol>
</system.webServer>
但是,这只允许使用单个域。如果您尝试添加其他添加节点,您的网站将无法加载。如果您想允许多个域,则需要尝试列出here列出的解决方案之一。
答案 1 :(得分:0)
要检查的事项:
答案 2 :(得分:0)
把:
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="GET, PUT, POST, DELETE, HEAD, OPTIONS" />
<add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept" />
</customHeaders>
</httpProtocol>
在Web Config中,这实际上涵盖了所有内容,并将根据“*”通配符通过所有内容。如果您希望将具体域列入白名单,请将它们放入:
<add name="Access-Control-Allow-Origin" value="*" />
启用您可以通过全局配置执行操作,也可以使用属性执行操作:
[EnableCors(origins: "*", headers: "*", methods: "*")]
在相关控制器上。它是两者中的一个,如果你同时使用这两个选项,它就会窒息。
此外,您可以编写自己的属性,可以通过覆盖EnableCors属性来处理web.config appSettings或数据库中的起源,标题和方法的加载,但这已经超出了我认为的问题范围。