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

时间:2014-05-05 03:04:53

标签: c# javascript ajax asp.net-web-api asp.net-web-api2

我一直试图让删除工作,似乎无法让它工作!

所有GET请求似乎都很好,但如果我尝试使用删除动词,我会收到上述错误。

如果我将它设为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

我已经尝试过几乎所有可想象的web.config,你可以删除WebDAV和WebDAVModule并使用ExtensionlessUrlHandler。

唯一的区别是我也包括这个以允许跨域。我真的希望这不会那么难。

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

2 个答案:

答案 0 :(得分:2)

看起来您正在使用跨域调用,您是否为项目添加了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 }
            );
        }
    }
}

答案 1 :(得分:0)

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

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

更多详细信息: https://github.com/shahedbd/DotNetCoreRestAPI