为啥此请求返回 405 Method Not Allowed?

Posted

技术标签:

【中文标题】为啥此请求返回 405 Method Not Allowed?【英文标题】:Why is this request returning 405 Method Not Allowed?为什么此请求返回 405 Method Not Allowed? 【发布时间】:2014-11-26 18:50:17 【问题描述】:

在我不得不 POST 数据之前,对我的 API 的请求一直在进行。 API 需要 JSON,所以我将 content-type 更改为 application/json,这导致所有 CORS 实现都需要 preflights,现在我得到 405。事情是,请求/响应看起来不错。请求头接受,内容类型在Access-Control-Request-Headers。允许请求方法POSTPOSTPUT。 Access-Control-Allow-Origin 允许所有来源。什么给了?

Remote Address: -
Request URL: -
Request Method: OPTIONS
Status Code: 405 Method Not Allowed
Request Headers
  Accept: */*
  */// for the sake of syntax highlighting
  Accept-Encoding: gzip,deflate,sdch
  Accept-Language: en-US,en;q=0.8
  Access-Control-Request-Headers: accept, content-type
  Access-Control-Request-Method: POST
  Cache-Control: no-cache
  Connection: keep-alive
  Host: -
  Origin: http://localhost
  Pragma: no-cache
  Referer: http://localhost/
Response Headers
  Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept
  Access-Control-Allow-Origin: *
  Allow: POST,PUT
  Cache-Control: no-cache
  Content-Length: 76
  Content-Type: application/json; charset=utf-8
  Date: Wed, 01 Oct 2014 19:43:56 GMT
  Expires: -1
  Pragma: no-cache
  Server: Microsoft-IIS/8.0
  X-AspNet-Version: 4.0.30319
  X-Powered-By: ASP.NET

canjs issue

【问题讨论】:

也许我看错了,但这并不是说您的请求方法是 OPTIONS 而不是 POST 是的,响应说只允许 POST 和 PUT。 是的,这就是预检请求。因为它是一个 CORS 请求,所以它询问 POST 是否是一种可接受的方法。但是你可能正在做一些事情...... 【参考方案1】:

相关 *** 帖子

这些帖子(1、2)说给enable CORS on WebApi using Microsoft.AspNet.WebApi.Cors package 并提供implementation of WebApiConfig.cs。

这些帖子(1、2、3)说通过在<system.webServer> 中添加这个来删除 WebDAV。

<handlers>
  <remove name="WebDAV"/>
</handlers>
<modules runAllManagedModulesForAllRequests="true">
  <remove name="WebDAVModule"/>
</modules>

【讨论】:

【参考方案2】:
  services.AddCors(o => o.AddPolicy("MyPolicy", builder =>
            
                builder.AllowAnyOrigin()
                       .AllowAnyMethod()
                       .AllowAnyHeader();
            ));

【讨论】:

以上是关于为啥此请求返回 405 Method Not Allowed?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 warp 会为输入错误的参数返回 HTTP 405 Method Not Allowed?

Spring MVC PUT 请求返回 405 Method Not Allowed

为啥当我使用 Perl 的 REST::Client 发送 POST 请求,而不是使用 Perl 的 LWP::UserAgent 或 Python 时,我得到“405: Method Not All

Wildfly 允许 OPTIONS 方法但返回 405 Method not allowed

JQuery Ajax POST 到 Web API 返回 405 Method Not Allowed

Ngrok 在隧道我的本地主机(Laravel)时返回 405 Method Not Allowed