2014-06-25 151 views
0

我正在web api項目中工作,其中我必須編寫刪除帳戶的方法。 我已經創建了一個名爲RemoveAccount的控制器,我已經寫了我的Delete帳戶方法。 以下是代碼。如何使用ajax調用在REST中調用@DELETE Web服務?

 public RemoveAccountRes Delete(RemoveAccountModel objRemove, string function = "") 
    { 
     RemoveAccountRes objModel = new RemoveAccountRes(); 
     if (ModelState.IsValid) 
     { 
      User user = null; 
      try 
      { 
       user = UserHelper.GetLoggedInUser(Convert.ToString(user.UserGuid)); 
       if (user == null || objRemove.User == null) 
       { 
        objModel.ErrorMessage = "User Not Valid"; 
        objModel.ErrorCode = 403; 
        objModel.Success = false; 

        return objModel; 
       } 
       if (function == "delete") 
       { 
        UserRepository.Delete(objRemove.User.UserId); 
        UserHelper.LogOutUser(); 
        objModel.ErrorMessage = "Account is Deleted"; 
        objModel.ErrorCode = 200; 
        objModel.UserGuid = Convert.ToString(user.UserGuid); 
        objModel.Success = true; 
       } 
      } 
      catch (Exception ex) 
      { 
       objModel.ErrorMessage = "Unidentified Error"; 
       objModel.ErrorCode = 500; 
       objModel.UserGuid = Convert.ToString(user.UserGuid); 
      } 
      return objModel; 
     } 
     else 
     { 
      objModel.ErrorMessage = "Invalid/Incomplete requests"; 
      objModel.ErrorCode = 400; 

      return objModel; 
     } 
    } 

而對於上述方法的模式是:

public class RemoveAccountModel 
{ 
    public User User { get; set; } 

} 

public class RemoveAccountRes 
{ 
    public int ErrorCode { get; set; } 
    public string ErrorMessage { get; set; } 
    public int UserId { get; set; } 
    public string UserGuid { get; set; } 
    public bool Success { get; set; } 
} 

我創建了一個單獨的測試項目來測試這個API方法。 以下是AJAX調用,它被刪除按鈕的點擊調用:

$(document).ready(function() { 
      $("#btnDelete").click(function() { 
       alert("Hello"); 
       var request = $.ajax({ 
        url: "http://localhost:13979/api/RemoveAccount?function='delete'", 
        type: "DELETE", 
        dataType: "json" 
       }); 

       request.done(function (msg) { 
        alert("Request success: " + msg); 
        $("#divResponse").empty().append("<span>" + JSON.stringify(msg) + "</span>"); 
        //console.log(JSON.stringify(msg)); 
       }); 

       request.fail(function (jqXHR, textStatus) { 
        alert("Request failed: " + textStatus); 
        $("#divResponse").empty().append("<span>" + JSON.stringify(textStatus) + "</span>"); 
        //console.log(JSON.stringify(textStatus)); 
       }); 


      }); 

     }); 

當我試圖調試,我發現它不是調用該URL和我得到「內部服務器錯誤」僅適用於這種方法,休息所有工作都很好。

我哪裏錯了?

+0

你能提供一些關於這個錯誤的細節嗎?在瀏覽器或Fiddler中使用開發工具可以給我們更多的細節 – Novakov

回答

0

你已經有了參數function=delete是否真的重要,如果HTTP請求的類型爲DELETE,我會建議將其更改爲POST

jQuery docs

請求的類型作出( 「POST」或「GET」),默認爲「GET」。注意:其他HTTP請求方法(如PUT和DELETE)也可以在此處使用,但它們不受所有瀏覽器支持。

另一件事...你有這種映射正確嗎?

http://localhost:13979/api/RemoveAccount正在調用一個名爲Delete的函數 - 如果您在路由代碼中處理該函數,那很好。

+0

嗨。謝謝。我將HTTP請求更改爲POST,現在它工作正常。 :) – user2240189