可以将ASMX配置为响应HTTP 1.1 OPTIONS请求吗?

Joh*_*n K 6 asmx http-verbs iis-7.5

似乎ASMX隐含地不允许OPTIONS动词.我发布这个问题是因为我正在使用POST的jQuery AJAX调用,它首先在发出POST动词**之前向服务器查询可用的OPTIONS.

默认情况下,Web.config将所有谓词映射到旧版ASMX,如此部分配置示例所示,因此所有内容都应正确路由:

<system.webServer>
    <requestFiltering>
        <verbs>
          <add verb="OPTIONS" allowed="true"/>
          <add verb="GET" allowed="true"/>
          <add verb="POST" allowed="true"/>
        </verbs>
    </requestFiltering>

<handlers>
    <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode"
       type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
Run Code Online (Sandbox Code Playgroud)

但是,对于OPTIONS请求,HTTP响应始终为405.例如,给出以下请求:

OPTIONS http://localhost:35920/MarkupTransfomer.asmx HTTP/1.1
Host: localhost:35920
Access-Control-Request-Method: POST
Run Code Online (Sandbox Code Playgroud)

并始终导致:

HTTP/1.1 405 Method Not Allowed
Server: Microsoft-IIS/7.5
X-AspNet-Version: 2.0.50727
Run Code Online (Sandbox Code Playgroud)

jQuery AJAX调用如下所示,来自最近一篇关于使用ASMX的Encosia博客文章的推荐:

    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "http://localhost:35920/MarkupTransfomer.asmx",
        data: "{'hi'}",
        dataType: "json"
    });
Run Code Online (Sandbox Code Playgroud)

**注意:我不想将客户端切换为使用GET而不是POST.

摘要问题:是否
可以配置ASP.NET以允许ASMX固有地处理O​​PTIONS请求而不会出现错误?

我考虑过的其他想法

  • 我可以找一种方法告诉你jQuery.ajax(..)不要在POST之前发出OPTIONS动词吗?

  • 如果我不能从传统的ASMX那里得到什么,我还考虑了另外两个潜在的想法:

    1. 实现a System.Web.IHttpHandler,将其粘贴在web.config handlers部分,以仅管理对默认ASMX行为之外的verbs=OPTIONS请求path=*.asmx.这将是一个可行的解决方法.
    2. 我可以切换到使用WCF.但是我想先知道ASMX是否过于笨拙.

在我采取行动之前,我想向社区查询我可能忽略的事情,或者更好的选择(没有双关语).

更新#1

是的,我的网络服务托管在不同的域上.显然,使用相同的原始策略导航过多的问题.这个更新绝对是值得信息的所有事情考虑的问题的上下文!
但是,我想确保此问题保留在ASMX服务器和HTTP级别.虽然我可能在不久的将来面临相关的浏览器问题,但这些问题对于解决此问题的HTTP协议级别并不重要.谢谢.

Joh*_*ers -1

我不知道 ASMX 是否能够处理 OPTIONS,即使对于 AJAX 请求也是如此。对于 OPTIONS 动词,您到底想返回什么?客户使用 OPTIONS 的目的是什么?

另外,我还从 ASP.NET 处理 OPTIONS 动词的角度对此进行了研究。就我而言,它在根 web.config 级别被禁止,而不是在 ASP.NET 或 ASMX 级别。该动词的默认映射是

<add path="*" verb="*" type="System.Web.HttpMethodNotAllowedHandler" validate="True" />
Run Code Online (Sandbox Code Playgroud)

这对应于您收到的 405 错误。