在Web API中调用DELETE方法

时间:2015-02-09 15:20:42

标签: c# .net asp.net-web-api

在新的Web API项目中,有Get方法:

// GET api/values/5
public string Get(int id)
{
    return "value";
}

以及此Delete方法:

// DELETE api/values/5
public void Delete(int id)
{
    var client = new MongoClient("mongodb://localhost:27017");
    var server = client.GetServer();
    var db = server.GetDatabase("Test");
    var collection = db.GetCollection<Entity>("Entities");
    var deleteEntity = Query<Entity>.EQ(e => e.Id, id);
    collection.Remove(deleteEntity);        
}

他们有一个类似的网址:api/values/5

当我想调用Delete方法时,它会执行Get方法。我该怎么办?

4 个答案:

答案 0 :(得分:5)

URL是相同的,但您使用“DELETE”'http方法'而不是“GET”来调用此URL。如果您只是浏览浏览器中的URL,浏览器将只执行GET。如何以编程方式执行DELETE(或POST或PUT)将取决于您用于调用服务的库,但它们都倾向于使用某种参数或属性来设置此方法。

答案 1 :(得分:2)

查看HttpDelete属性:

https://msdn.microsoft.com/en-us/library/system.web.mvc.httpdeleteattribute(v=vs.118).aspx

你需要像这样装饰你的方法,以便MVC知道如何处理传入的请求:

[HttpGet]
public string Get(int id)
{
    ...
}

[HttpDelete]
public void Delete(int id)
{
    ...
}

如果您通过HTML表单提交删除方法,请记住它们只支持POST和GET方法,因此您需要通过JavaScript提交DELETE:

http delete request from browser

答案 2 :(得分:0)

使用...

获取:/ controller / 123456

删除:/ controller / id / 123456

答案 3 :(得分:0)

下面的配置文件解决了我的问题:

<validation validateIntegratedModeConfiguration="false" />
<handlers>
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />

  <!--This will enable all Web API verbose-->
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>