微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我正在做一个CORS POST请求,并将Content-Type头设置为json。这会引发“预检OPTIONS”的启动请求(这是好的和预期的)

这个OPTIONS请求响应了200 OK,但这不是来自我的WebAPI应用程序。

我有一个自定义消息处理程序到位,它从来没有得到打击,所以请求在IIS之前得到响应,然后再打ASP.NET。

我已经找到了几个关于这个问题的帖子,他们说如下

>确保WebDav被卸载/删除/禁用 – 完成
>确保OPTIONsverbHandler被删除/更改为使用aspnet_isapi.dll – TRIED BOTH
>确保extensionlessURLHandler包含OPTIONS动词 – DONE

但是,我的选择请求仍然被劫持。我的意思是,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相关的,首先修改你的模块元素,以包含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,OPTIONS" modules="IsapiModule" scriptprocessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,bitness64" responseBufferLimit="0" />
   <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,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,OPTIONS" />
        <add name="Access-Control-Allow-Headers" value="Content-Type" />
      </customHeaders>
    </httpProtocol>
  </system.webServer>

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


这篇文章主要讲解了“WPF如何实现带筛选功能的DataGrid”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“WPF...
本篇内容介绍了“基于WPF如何实现3D画廊动画效果”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这...
Some samples are below for ASP.Net web form controls:(from http://www.visualize.uk.com/resources/asp
问题描述: 对于未定义为 System.String 的列,唯一有效的值是(引发异常)。 For columns not defined as System.String, the only vali
最近用到了CalendarExtender,结果不知道为什么发生了错位,如图在Google和百度上找了很久,中文的文章里面似乎只提到了如何本地化(就是显示中文的月份)以及怎么解决被下拉框挡住的问题,谈
ASP.NET 2.0 page lifecyle ASP.NET 2.0 event sequence changed a lot since 1.1. Here is the order: App
静态声明: &#39; Style=&quot;position: relative&quot; AppendDataBoundItems=&quot;True&quot;&gt; (无 或 空 或
以下内容是从网络上搜集资料,然后整理而来的。不当之处,请不吝指教。(The following were from network, and edited by myself. Thanks in a
Imports System Imports System.Reflection Namespace DotNetNuke &#39;*********************************
Ok so you have all seen them: “8 million tools for web development”, “5 gagillion tools that if you