我在我的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
等...
有没有解决方法?
请帮助,谢谢。
更新
我的后端代码:
[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方法工作,因为没有必要。
那么你还有其他更好的解决方案吗?
答案 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)
{
...
}