.net core IIS Express上本地运行的.Net Core API上的CORS飞行前请求问题
我们正在使用.NETCore(3.1.1)API和react前端开发一个应用程序。应用程序使用Windows身份验证。我们正在运行依赖于IIS的API框架。我们最初有CORS问题,但通过安装CORS模块并在部署时对web.config进行转换,在服务器上的IIS上实现了所有功能。我们还通过在Visual Studio的applicationhost.config文件中添加一个.net core IIS Express上本地运行的.Net Core API上的CORS飞行前请求问题,.net-core,cors,iis-express,.net Core,Cors,Iis Express,我们正在使用.NETCore(3.1.1)API和react前端开发一个应用程序。应用程序使用Windows身份验证。我们正在运行依赖于IIS的API框架。我们最初有CORS问题,但通过安装CORS模块并在部署时对web.config进行转换,在服务器上的IIS上实现了所有功能。我们还通过在Visual Studio的applicationhost.config文件中添加一个部分,在IIS Express上运行了基本CORS。但是,当在IIS Express上本地运行时,我们仍然停留在对PUT和
部分,在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"
}
}
以下是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>
我尝试在本地安装CORS模块(这解决了IIS服务器上的问题),但它需要IIS 7引擎或更高版本才能运行。我认为最基本的问题是飞行前的请求是匿名发送的,我们禁用了匿名身份验证,因此我们可以使用Windows身份验证-但除了重写应用程序来处理CORS和应用程序中的身份验证,而不是让IIS来处理它之外-我对IIS Express有任何选择吗
以下是我用来帮助我走到这一步的一些资源:
,
,
,
,
更新
我可能已经通过在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>
这基本上只是对所有选项请求返回一个定制的200响应。这对于生产环境来说并不理想,但因为这只是为了在本地运行IIS Express,所以应该可以。我会发布另一个更新后,更多的测试,以确认
更新2
事实上,这确实纠正了这个问题。希望这能帮别人节省一些时间 您可以手动修改IIS Express使用的
applicationHost.config
文件,以使用IIS安装文件夹中的CORS模块。@LexLi-除了我已经添加到applicationHost.config
文件中的CORS信息之外,还可以提供更多关于需要添加哪些内容的详细信息吗?您现在应该可以在此处使用PowerShell脚本将CORS模块从IIS安装到IIS Express
<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>