来自 .aspx 页面的带有授权标头的 Ajax 发布请求给出错误“选项 405(不允许的方法)”

Posted

技术标签:

【中文标题】来自 .aspx 页面的带有授权标头的 Ajax 发布请求给出错误“选项 405(不允许的方法)”【英文标题】:Ajax post request with Authorization header from .aspx page giving error "Option 405 (Method Not Allowed) " 【发布时间】:2014-08-29 05:57:36 【问题描述】:

我有一个 aspx 页面,我从那里将 jquery ajax 发布请求发送到我的 Web 服务。 我已将 Authorization 标头添加到 post call。我的代码是:-

 $.ajax(
        type: "POST",
        beforeSend: function (xhr) 
              xhr.setRequestHeader("Authorization", "Bearer " + accessToken);
        ,
        url: " My Web Service URL ",
        contentType: "application/json; charset=utf-8",
        data:  htmlText: data,
        datatype: 'json',
        success: function (data) 
             alert(JSON.stringify(data));
        
    );

在 Web.config 我添加了:-

 <system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
  <remove name="WebDAVModule" />
</modules>
<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Request-Headers" value="Authorization, Content-Type"/>
    <add name="Access-Control-Allow-Headers" value="Authorization" />
    <add name="Access-Control-Allow-Methods" value="POST, GET, OPTIONS" />
  </customHeaders>
</httpProtocol>
<handlers>
  <remove name="WebDAV" />
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <remove name="OPTIONSVerbHandler" />
  <remove name="TRACEVerbHandler" />
  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
<directoryBrowse enabled="true" />

发送请求后,我在检查元素 (Chrome) 中得到响应:-

远程地址:“我的远程地址” 请求 URL:“我的主机 URL” 请求方法:选项 状态码:405 方法不允许

请求标头查看源代码:-

接受:/ 接受编码:gzip、deflate、sdch 接受语言:en-US,en;q=0.8,es;q=0.6,fr;q=0.4,hi;q=0.2 Access-Control-Request-Headers:接受、授权、内容类型 访问控制请求方法:POST 连接:保持活动 主机:“我的主机 URL” 来源:测试 参考:/test/MyPage.aspx 用户代理:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36

响应标头查看源代码:-

Access-Control-Allow-Headers:Origin、X-Requested-With、Content-Type、Accept 访问控制允许方法:GET、POST、PUT、DELETE、OPTIONS 访问控制允许来源:* 允许:POST 缓存控制:无缓存 内容长度:76 内容类型:应用程序/json;字符集=utf-8 日期:格林威治标准时间 2014 年 7 月 8 日星期二 12:42:10 过期:-1 杂注:无缓存 服务器:Microsoft-IIS/7.5 X-AspNet-版本:4.0.30319

【问题讨论】:

【参考方案1】:

在 MVC 5 Web Api 中,首先我在 web.config 文件中为跨域添加了 customHeader,但没有得到预期的输出。所以我将 [EnableCors("", "", "*")] 添加到控制器中的每个方法中,我得到了所需的输出。奇怪的 !!但是得到了输出。

【讨论】:

以上是关于来自 .aspx 页面的带有授权标头的 Ajax 发布请求给出错误“选项 405(不允许的方法)”的主要内容,如果未能解决你的问题,请参考以下文章

保护来自 Inspect 元素的 Ajax 请求中的授权标头

React - 带有标头的 ajax GET 请求仍返回 401(未经授权)

AJAX 调用后添加授权标头

JQuery AJAX 标头授权 POST

带有自定义标头的 Ajax 请求发送到启用 CORS 的 Web API 服务器

来自 Azure 函数的 C# HttpClient POST 请求,带有用于第三方 API 的授权标记,被剥离了标头和正文