"删除" Http请求的类型在WebAPI中不起作用?

时间:2013-05-17 05:36:04

标签: ajax asp.net-mvc-4 asp.net-web-api

我在我的WebAPI项目中有GET,PUT,POST工作。 我正在做的最后一个Http请求是DELeTE,但是它不起作用。

我已经阅读了这里以及其他网站上的很多帖子,但都没有。 e.g。

WebAPI Controller is not being reached on DELETE command

WebAPI Delete not working - 405 Method Not Allowed

ASP.Net WebAPI Delete verb not working

ASP.NET Web API - PUT & DELETE Verbs Not Allowed - IIS 8

http://social.msdn.microsoft.com/Forums/en-US/windowsazuredevelopment/thread/8906fd7e-a60b-484e-be63-9574b9fca44a/

等...

有没有解决方法?

请帮助,谢谢。

更新

我的后端代码:

         [HttpDelete]
    public HttpResponseMessage Delete(int divisionID)
    {
        if (divisionID != default(int))
        {
            var found = dc.MedicareLocalAccounts.SingleOrDefault(m => m.DivisionID == divisionID);

            if (found == null)
            {
                return new HttpResponseMessage(HttpStatusCode.NotFound);
            }

            dc.MedicareLocalAccounts.Remove(found);

            dc.SaveChanges();

            return new HttpResponseMessage(HttpStatusCode.OK);
        }

        return new HttpResponseMessage(HttpStatusCode.NotFound);
    }

现在,如果我将参数类型从int更改为任何类,那么让我们说分区

Delete(Division d)
{
     int divisionID = d.DivisionID;
     //....the rest is same
}

这样就可以了。

但我只是不想将整个对象作为参数输入,以使DELETE方法工作,因为没有必要。

那么你还有其他更好的解决方案吗?

2 个答案:

答案 0 :(得分:3)

Web API处理简单参数类型(int)的方式与复杂类型(类)不同。默认情况下,从请求URI中获取一个简单参数,并从请求正文中获取复杂类型。

在您的第一个示例中,参数名称为“divisionID” - 这是否与您的路径变量匹配?默认的Web API路由是“api / {controller} / {id}”,因此参数应命名为“id”。

答案 1 :(得分:0)

解决方法是使用AttributeRouting库。这是WebAPI的扩展,可以从nuget下载。使用AttributeRouting库,您可以例如使用用HttpGet实现一个函数,它将执行删除

[GET("delete/{id}"]
function DeleteThis(int id)
{
...
}