【发布时间】:2021-10-23 14:43:35
【问题描述】:
我在 ASP netcore 3.1 MVC API 上有一个 cors 实现。它适用于开发。
在 startup.cs 中(我基本上接受任何来源以尝试使其正常工作)
app.UseCors(builder=>{
builder.SetIsOriginAllowed(origin={
var host=new Uri(origin).Host;
return true; ///Accept any
})
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials()
})
我有一套标准的控制器,其中一个是允许匿名身份验证的用户。
当我在 IISEXPRESS 上运行时,一切正常
当我在类似生产环境的 IIS 上运行时,我收到一系列错误,以 No Headers for Allow-Control-Allow-Origin 开头
我尝试设置 web.config 以使用带有四个响应的自定义标头
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="https://MYDOMAIN" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="OPTIONS" />
<add name="Access-Control-Allow-Credentials" value="true" />
</customHeaders>
</httpProtocol>
但现在我得到 Response to preflight request doesn't pass access control check: It does not have HTTP ok status.
为什么必须做这些,因为它在开发中有效? 为什么 IIS 似乎只允许一个域用于 CORS。不是所有 CORS 都允许多个来源吗?
为什么我找不到解决方案。
【问题讨论】:
-
请看一下 IIS CORS 模块,blogs.iis.net/iisteam/getting-started-with-the-iis-cors-module
-
这与许多示例一样,将起源限制在域的范围内。 COPRS是允许不同的域。似乎通配符不起作用。该代码还处理cors i并在dev中工作。他们是阻止 IIS 妨碍的方法吗?
-
我怀疑你是否试一试,因为其他人确实在多个域上取得了成功,stackoverflow.com/a/66461238/11182。此外,您的屏幕截图在预检请求中显示 401,这表明您启用了基于质询的身份验证(Windows/Basic 或其他)。该 401 只能由 IIS CORS 模块解决,您可以在其中配置预检请求以允许无需身份验证。
-
感谢 401 是个好地方。我会尝试。我需要在服务器上为 cors 安装任何东西吗?只是想知道为什么我需要这样做,因为代码管理着整个 cors 的事情
-
你安装了IIS CORS Module,如果没有,请尝试安装?
标签: asp.net-core iis cors