WebAPI DELETE - HTTP/1.1 405方法不允许

本文关键字:不允许 方法 DELETE HTTP WebAPI | 更新日期: 2023-09-27 18:01:52

我一直试图让删除工作,只是不能使它工作!

所有GET请求看起来都很好,但是如果我尝试使用delete动词,我就会得到上面的错误。

方法本身是可达的,如果我使它一个GET,但只要我添加[HttpDelete]属性,并尝试设置调用类型它失败。

方法:

[HttpDelete]
public void Delete(int id) {
    // delete method.
}

调用:

remove: function(key) {
    $.ajax({
        url: MyApp.settings.endpoint + 'list/delete/1,
        type: "DELETE"
    });
}

它似乎挂在OPTIONS预请求?

请求:

(Request-Line)  OPTIONS /api/list/delete/1 HTTP/1.1
Host    192.168.1.139
User-Agent  Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0
Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language en-US,en;q=0.5
Accept-Encoding gzip, deflate
Origin  null
Access-Control-Request-Method   DELETE

反应:

(Status-Line)   HTTP/1.1 405 Method Not Allowed
Cache-Control   no-cache
Pragma  no-cache
Allow   DELETE
Content-Type    application/xml; charset=utf-8
Expires -1
Server  Microsoft-IIS/7.5
X-AspNet-Version    4.0.30319
Access-Control-Allow-Origin *
Date    Mon, 05 May 2014 02:54:38 GMT
Content-Length  96

我试过几乎所有能想到的网站。配置,让你删除WebDAV和WebDAVModule和混乱的ExtensionlessUrlHandler。

唯一的区别是我还包括了这个,以允许跨域。我真希望事情不会这么难。

<httpProtocol>
  <customHeaders>
    <clear />
    <add name="Access-Control-Allow-Origin" value="*" />
  </customHeaders>
</httpProtocol>

WebAPI DELETE - HTTP/1.1 405方法不允许

看起来您正在使用跨域调用,您是否为您的项目添加了CORS支持?

请注意,下面的代码是一个大锤,您可以选择性地启用每个控制器。查看以下链接了解更多信息:http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api

using System.Web.Http;
namespace WebService
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // New code
            var cors = new EnableCorsAttribute("www.example.com", "*", "*");
            config.EnableCors(cors);
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }
}

请在Startup.cs中启用跨域资源共享(CORS)

services.AddCors(options =>
            {
                options.AddPolicy("CorsPolicy",
                    builder => builder.AllowAnyOrigin()
                    .AllowAnyMethod()
                    .AllowAnyHeader()
                    .AllowCredentials());
            });

更多细节:https://github.com/shahedbd/DotNetCoreRestAPI