Log*_*nde 5 cors iis-express .net-core
我们正在使用 .Net Core (3.1.1) API 和 React 前端开发一个应用程序。该应用程序使用 Windows 身份验证。我们正在运行依赖于 IIS 的 API 框架。我们最初遇到了 CORS 问题,但通过安装 CORS 模块并在部署时对 web.config 进行转换,让服务器上的 IIS 一切正常。<customheaders>
通过向 Visual Studio 的 applicationhost.config 文件添加一个部分,我们还可以在 IIS Express 上运行基本的 CORS 。然而,当在 IIS Express 上本地运行时,我们陷入了 PUT 和 DELETE 操作的预检请求上。
这是我的 lauchSettings.json 文件:
{
"iisSettings": {
"windowsAuthentication": true,
"anonymousAuthentication": false,
"iisExpress": {
"applicationUrl": "http://localhost:xxxxx",
"sslPort": xxxxx
}
},
"$schema": "http://json.schemastore.org/launchsettings.json",
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "api/values",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"API": {
"commandName": "Project",
"launchBrowser": true,
"launchUrl": "api/values",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "http://localhost:xxxxx;https://localhost:xxxxx"
}
}
Run Code Online (Sandbox Code Playgroud)
这是 applicationhost.config 文件的 CORS 部分:
<customHeaders>
<clear />
<add name="X-Powered-By" value="ASP.NET" />
<remove name="Access-Control-Allow-Origin" />
<add name="access-control-allow-origin" value="http://localhost:3000" />
<add name="access-control-allow-headers" value="*" />
<add name="access-control-allow-credentials" value="true" />
<add name="access-control-allow-methods" value="get, post, put, delete, options" />
<add name="access-control-max-age" value="600" />
</customHeaders>
Run Code Online (Sandbox Code Playgroud)
正如我所说,这对于 GET 和 POST 非常有用,但对于 PUT 或 DELETE 不起作用。我们得到错误:
Access to fetch at 'https://localhost:xxxx/api/blah/blahblah' from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.
Run Code Online (Sandbox Code Playgroud)
我尝试在本地安装 CORS 模块(这解决了使用 IIS 的服务器上的问题),但它需要 IIS 7 引擎或更高版本才能运行。我认为基本问题是预检请求是匿名发送的,并且我们禁用了匿名身份验证,因此我们可以使用 Windows 身份验证 - 但缺少重写应用程序来处理应用程序中的 CORS 和身份验证,而不是让 IIS 处理它 -我有 IIS Express 的选项吗?
以下是我到目前为止使用的一些资源: https: //davidsekar.com/asp-net/cors-development-in-localhost、https : //learn.microsoft.com/en-us/aspnet/core/ security/authentication/windowsauth?view=aspnetcore-3.1&tabs=visual-studio, https://blogs.iis.net/iisteam/introducing-iis-cors-1-0, http: //blog.jonathanchannon.com/2013 /09/16/启用-cors-in-iisexpress/ ,
更新
我可能通过将以下内容添加到该system.WebServer
部分的 applicationhost.json 文件中来解决这个问题:
<rewrite>
<globalRules>
<rule name="Preflight" patternSyntax="Wildcard" stopProcessing="true">
<match url="*" />
<conditions>
<add input="{REQUEST_METHOD}" pattern="OPTIONS" />
</conditions>
<action type="CustomResponse" statusCode="200" statusReason="Preflight" statusDescription="Preflight" />
</rule>
</globalRules>
</rewrite>
Run Code Online (Sandbox Code Playgroud)
这基本上只是返回对所有 OPTIONS 请求的自定义 200 响应。对于生产来说并不理想,但由于这只是为了在本地运行 IIS Express,所以应该没问题。经过更多测试确认后,我将发布另一个更新。
更新 2 事实上,这确实纠正了问题。希望这有助于节省其他人的时间......
归档时间: |
|
查看次数: |
3797 次 |
最近记录: |