2013-05-17 141 views
0

我有GET,PUT,POST在我的WebAPI項目中工作。 我正在做的最後一個Http請求是DELeTE,但它不起作用。「DELETE」類型的Http請求在WebAPI中不起作用?

我已閱讀了許多帖子,在這裏以及其他網站,其中沒有一個。例如

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到任何類更改參數類型,比方說,司

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

這樣, 有用。

但我只是不想輸入整個對象作爲參數,使DELETE方法的工作,因爲它是沒有必要的。

那麼你有其他更好的解決方案嗎?

+1

您鏈接的問題似乎有被接受的答案。因爲「似乎是微軟的代碼問題」似乎是不正確的(因爲問題的提問者現在顯然已經成功了),「有沒有任何解決方法」似乎只是要求重新發布這些答案。 –

+1

_「這似乎是一個微軟代碼問題」_ - 不。你認爲他們忘了實施刪除?它很可能是**你的**代碼中的一個錯誤,你不會顯示。 – CodeCaster

+0

什麼是你的實現和配置 –

回答

3

的Web API處理簡單的參數類型(int)不同於複雜類型(類)。默認情況下,從請求URI獲取一個簡單參數,並從請求主體獲取一個複雜類型。

在第一個例子中,參數名稱是'divisionID' - 這是否與您的路線變量匹配?默認的Web API路由是「api/{controller}/{id}」,所以參數應該被命名爲'id'。

+0

簡單而直接的問題。謝謝 !!!我不知道即使這個名稱應該符合WebAPI路由約定。 – Franva

0

解決方法是使用AttributeRouting庫。這是WebAPI的擴展,可以從nuget下載。通過AttributeRouting庫,你可以實現與HTTPGET一個函數,西港島線執行刪除

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

嗨雷蒙,謝謝你的回覆。我想嘗試它作爲最後的解決方案,因爲我不想通過使用其他庫來實現它。 – Franva