.net core IIS Express上本地运行的.Net Core API上的CORS飞行前请求问题

.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和

我们正在使用.NETCore(3.1.1)API和react前端开发一个应用程序。应用程序使用Windows身份验证。我们正在运行依赖于IIS的API框架。我们最初有CORS问题,但通过安装CORS模块并在部署时对web.config进行转换,在服务器上的IIS上实现了所有功能。我们还通过在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"
    }
  }
以下是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>