gpt4 book ai didi

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

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

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

此选项请求以200 OK响应,但这不是来自我的WebAPI应用程序。

我有一个自定义的消息处理程序,并且它从未被点击过,因此在击中ASP.NET之前,请求已被IIS响应。

我找到了关于该主题的几篇文章,他们说以下内容


确保已卸载/删除/禁用WebDav-完成
确保已删除/更改OPTIONSVerbHandler以使用aspnet_isapi.dll-两者都尝试
确保extensionlessURLHandler包含OPTIONS动词-完成


但是,我的选择请求仍然被劫持。我的意思是,IIS以200 OK响应,但响应中未包含Access-Control-Allow-Origin标头。它不包含此标头,因为它永远不会到达设置该标头的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相关的几件事,首先将modules元素修改为包含属性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使用以下命令输出正确的标头:

  <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/

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