0

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

我已经阅读了这里以及其他网站的许多帖子,没有一个。例如

在 DELETE 命令上未到达 WebAPI 控制器

WebAPI 删除不起作用 - 405 方法不允许

ASP.Net WebAPI 删除动词不起作用

ASP.NET Web API - 不允许 PUT 和 DELETE 动词 - IIS 8

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

ETC...

有什么解决方法吗?

请帮忙,谢谢。

更新:

我的后端代码:

         [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 更改为任何类,比如说 Division

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

这样,它就起作用了。

但我只是不想输入整个对象作为参数来使 DELETE 方法工作,因为它不是必需的。

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

4

2 回答 2

3

Web API 处理简单参数类型 (int) 与处理复杂类型 (类) 不同。默认情况下,简单参数取自请求 URI,复杂类型取自请求正文。

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

于 2013-05-17T15:12:34.430 回答
0

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

[GET("delete/{id}"]
function DeleteThis(int id)
{
...
}
于 2013-05-17T05:52:20.907 回答