【问题标题】:The "DELETE" type of Http request does not work in WebAPI?“DELETE”类型的 Http 请求在 WebAPI 中不起作用?
【发布时间】:2013-05-12 05:04:47
【问题描述】:

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

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

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

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

这样就可以了。

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

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

【问题讨论】:

  • 您要链接的问题似乎有已被接受的答案。因此,“似乎是 Microsoft 代码问题”似乎是不正确的(因为问题的提问者现在显然已经成功),并且“是否有任何解决方法”似乎只是要求重新发布这些答案。
  • “这似乎是 Microsoft 代码问题” - 不。你认为他们忘记实施删除了吗?这很可能是您的代码中的错误,您没有显示。
  • 你的实现和配置是什么
  • @Damien_The_Unbeliever 我之所以说这是微软的问题,是因为我在那些链接中看到了一些解决方案,建议修改系统配置文件。现在我解决了我的问题,请看我的问题。
  • @CodeCaster 您好,请参阅我对 Damien 的回复,了解为什么我认为这是 Microsoft 问题。

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


【解决方案1】:

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

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

【讨论】:

  • 简单直接的问题。谢谢 !!!我不知道连名字都应该符合 WebAPI 路由约定。
【解决方案2】:

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

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

【讨论】:

  • 嗨,雷蒙德,感谢您的回复。我想尝试将其作为最后的解决方案,因为我不想通过使用其他库来使其工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-07
相关资源
最近更新 更多