2016-01-20 88 views
0

我有一個簡單的webApi應用程序,我使用方法GET POST和DELETE。我面臨的問題是DELETE操作。當功能標題不等於POST的標題時,它不起作用。我收到錯誤DELETE webapi asp.net不支持

「請求的資源不支持http方法DELETE。」

這是我的控制器代碼。

public class MyController : ApiController 
{ 

    public List<JobInfo> Get() 
    { 
     //GET OPERATION 
    } 
    public void Post([FromBody]JToken body) 
    { 
     //POST OPERATION 
    } 

    public void Delete([FromUri]string id) 
    { 
     //DELETE OPERATION 
    } 
} 

我的服務器是這樣配置的。

public class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
     app.UseCors(CorsOptions.AllowAll); 
     HttpConfiguration configuration = new HttpConfiguration(); 
     configuration.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 
     app.UseWebApi(configuration); 
    } 
} 

如果我宣佈DELETE操作是這樣的:

public void Post([FromBody]JToken body) 

我讓它運行。問題是我需要來自uri的id(API是這樣定義的)。我搜索並發現這PUT and Delete not working with ASP.NET WebAPI and Database on Windows Azure

問題是,我不明白爲什麼這個限制,如果我可以打破它。 謝謝

+0

有什麼限制嗎?在你連接的問題中,OP有一個錯字。如果您指定要在路由中提取名稱應爲'id'的參數,則您的方法應該有一個名爲'id'的參數。順便說一句,你的'Get()'方法不接受任何參數。你如何獲得一個特定的JobInfo對象? –

+0

我以前遇到過客戶端和服務器端的動詞限制。查看X-HTTP-Method-Override標頭。這總是給你一個解決方法。 web api不支持它開箱即用,但創建一個消息處理程序來支持它並不困難 – rdans

+0

@PanagiotisKanavos我訪問數據庫並返回列表。該操作按設計進行。我的問題是爲什麼我不能用與POST不同的定義來聲明Delete函數。如果我用與DELETE相同的方式聲明POST和DELETE函數,但在DELETE中,我需要從URI獲取參數,而不是從BODY獲取參數。 – acostela

回答

1

最後我解決了它。問題基本上是參數中的裝飾器。如果我沒有使用[FromUri],它就會工作,並且該函數從URL獲取參數。

所以最後我寫了。

public void DeleteFromQueue(string id) 
    { 
     //DELETE operation 
    } 

,當我打電話

DELETE http://localhost:9000/api/controller/1223asd 

我得到的ID參數 「1223asd」