Ahh - Finalmente he encontrado una solución para mis CORS en IIS. Este fue uno de los problemas que surgieron durante la búsqueda de mi solución.
La respuesta correcta es aliostad's - El problema proviene del hecho de que para algunas soluciones para implementar el verbo 'OPTIONS', se recomienda eliminar el mapeo de ese verbo al ProtocolSupportModule. O tal vez alguien acaba de limpiar las asignaciones innecesarias, etc. Esto no dejó ningún controlador para OPCIONES.
yo no soy un experto en exactamente lo que sucede detrás de las escenas, pero parece que IIS se asegura de que hay un controlador de potencial para la solicitud mucho antes de que se dispare el evento Application_BeginRequest, esto a pesar de sus diagramas de secuencia:
https://msdn.microsoft.com/en-us/library/bb470252.aspx
Así se devuelve el estado 405 sin ejecutar su módulo. Lo que se envía al servidor es por ejemplo:
OPTIONS http://www.example.com/path/mypage.aspx
Así IIS está buscando un controlador para * .aspx que acepta el verbo OPCIONES. Si nos fijamos en su archivo applicationHost.config predeterminado, verá, por ejemplo:
<add name="PageHandlerFactory-ISAPI-4.0_32bit" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="PageHandlerFactory-ISAPI-4.0_64bit" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="PageHandlerFactory-Integrated-4.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="PageHandlerFactory-Integrated" path="*.aspx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode" />
acabo habían hecho lo siguiente en mi web.config para hacer de estado de parada de IIS que regresan 200 noops:
<remove name="OPTIONSVerbHandler" />
por lo tanto, tratando de que en un primer momento, y la conclusión de que esto es lo que se necesitaba, que añade lo siguiente a mi web.config:
<remove name="PageHandlerFactory-ISAPI-4.0_32bit" />
<remove name="PageHandlerFactory-ISAPI-4.0_64bit" />
<remove name="PageHandlerFactory-Integrated" />
<remove name="PageHandlerFactory-Integrated-4.0" />
<add name="PageHandlerFactory-ISAPI-4.0_32bit" path="*.aspx" verb="GET,HEAD,POST,DEBUG,OPTIONS" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="PageHandlerFactory-ISAPI-4.0_64bit" path="*.aspx" verb="GET,HEAD,POST,DEBUG,OPTIONS" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="PageHandlerFactory-Integrated-4.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG,OPTIONS" type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="PageHandlerFactory-Integrated" path="*.aspx" verb="GET,HEAD,POST,DEBUG,OPTIONS" type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode" />
Tenga en cuenta que los reemplazos se ajustan a lo que está en applicationHost.config, excep t con el verbo adicional OPTIONS agregado a cada línea.
Para aquellos de ustedes que están utilizando enrutamiento (MVC o WebAPI por ejemplo):
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="C:\windows\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="C:\windows\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" />
Por último, no soy un experto en IIS - quizás hay una manera más eficiente diferente de manejar el verbo OPCIONES para CORS (más específicamente, permita que su controlador CORS funcione sin la solución parcial de 'encabezado personalizado', estoy abierto a esas soluciones.
Asegúrese de que ve esto: http : //support.microsoft.com/kb/2015129 –