gpt4 book ai didi

asp.net-mvc - IIS 劫持 CORS Preflight OPTIONS 请求

转载 作者:行者123 更新时间:2023-12-02 22:35:31 25 4
gpt4 key购买 nike

我正在发出 CORS POST 请求并将 Content-Type header 设置为 json。这会触发预检选项请求(这很好,也是预期的)

此 OPTIONS 请求得到了 200 OK 响应,但这不是来 self 的 WebAPI 应用程序。

我有一个自定义消息处理程序,但它永远不会被命中,因此看起来该请求在命中 ASP.NET 之前就得到了 IIS 的响应。

我发现了几篇关于这个主题的帖子,他们的说法如下

  1. 确保 WebDav 已卸载/删除/禁用 - 完成

  2. 确保 OPTIONSVerbHandler 已删除/更改为使用 aspnet_isapi.dll - 同时尝试

  3. 确保extensionlessURLHandler包含OPTIONS动词 - DONE

但是,我的选项请求仍然被劫持。我的意思是,IIS 响应 200 OK,但响应中不包含 Access-Control-Allow-Origin header 。它不包含此 header ,因为它永远不会访问可设置此 header 的 WebAPI CORS 代码。

我能找到的两个最好的帖子听起来像我的问题是

此处:JQuery stuck at CORS preflight and IIS ghost response

这里:http://brockallen.com/2012/10/18/cors-iis-and-webdav/

我尝试在 IIS 中打开失败请求跟踪 (FERB),并将其设置为跟踪所有 200 个状态代码。我从未看到过记录选项请求...不确定这是否意味着 FERB 不跟踪 OPTIONS 请求,或者我是否需要更改 FERB 设置中的某些内容以使其跟踪 OPTIONS 请求,或者这是否是一个线索我的问题是什么?

这是在 IIS 7.5 上运行的 ASP.NET WebAPI 2.0(也在 IIS 8 和 IISExpress 上进行了测试,结果相同)无论哪种浏览器(Chrome、FF 和 IE 都会以同样的方式失败)

我已经尝试了有关该主题的所有方法,但仍然无法解决我的问题。

帮助我 StackOverflow,你是我唯一的希望。

最佳答案

您可以在这里尝试一些与 web.config 相关的操作,首先修改您的模块元素以包含属性 runAllManagedModulesForAllRequests="true",如下所示:

<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDavModule" />
</modules>

然后将您的处理程序设置为以下内容:

<handlers>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="WebDav" />
<remove name="OPTIONSVerbHandler" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>

这应该可以解决问题,但如果没有,作为最后的手段,您可以强制 IIS 使用以下内容输出正确的 header :

  <system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE,OPTIONS" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
</customHeaders>
</httpProtocol>
</system.webServer>

请注意通配符值,您确实应该将其设置为托管您的网站的域名。

关于asp.net-mvc - IIS 劫持 CORS Preflight OPTIONS 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22495240/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com