2016-05-31 59 views
1

我試圖做一個PUT調用我的服務點擊網址更新userREST HTTP PUT調用

我得到404,當代碼擊中我的網址,但在開發工具失敗它實際會達到我的控制器。我在想我把我的模型作爲參數傳遞錯了,有人請指出我適當的方向,我不知道我做錯了什麼。

這裏是我的服務呼叫

var updateUser = function(user) { 
     return $http({ 
      method: "PUT", 
      url: serviceBase + "/UserController/PutUser", 
      data: user 
     }).success(successCallBack).error(errorCallBack); 
    } 

,這裏是我的控制器

[HttpPut] 
    [Route("api/UserController/PutUser")] 
    public IHttpActionResult PutUser(UserDto user) 
    { 
     try 
     { 
      return Ok(); 
     } 
     catch (Exception) 
     { 
      return NotFound(); 
     } 

    } 

我試着用JSON.stringify(user)在我$http通話以及和並不走運得到同樣的404錯誤,但點擊後實際鏈接它會打我的控制器

謝謝您的建議!

+0

因爲你的網址以'/ {user}'結尾,這是一個佔位符。 –

+0

@DannyChen 我用/ {user}更新了我的代碼仍然有相同的問題 – kkdeveloper7

回答

0

您需要將用戶的id放在url的末尾。你的方法需要2個參數。一個userId和一個用戶。

您可能還想修改您的網址結構。

+0

但是如果想要將我的對象傳入put方法怎麼辦? – kkdeveloper7

+0

您在主體中傳遞對象並在url中傳遞該標識。所以你的方法需要2個參數。編輯我的答案。 –

+0

對不起,可能ne noob question.sö不把對象作爲單個參數? – kkdeveloper7

1

儘管通常的做法是在PUT請求中也包含一個標識符,但仍然可以通過一些較小的更改實現您的願望。

首先更新控制器中預期端點的URL。

注意:這只是一個例子。修改以適應您的特定需求。

public class UsersController : ApiController { 

    [HttpPut] 
    [Route("api/Users")] 
    public IHttpActionResult Put(User user) { 
     try { 
      //assuming some form of storage for models 
      repository.Users.Update(user); 
      return Ok(); 
     } catch (Exception) { 
      return NotFound(); 
     } 
    } 
} 

...,然後更新您的服務請求......

var updateUser = function(user) { 
    return $http({ 
     method: "PUT", 
     url: serviceBase + "/api/Users",   
     data: user 
    }).success(succesCallBAck).error(errorCallBack); 
} 

user將在請求控制器的正文中發送。

+0

我在cosole中得到這個 - 無法加載資源:服務器迴應狀態爲404(未找到)。當我點擊網址時,它顯示它給我這個「{」消息「:」所請求的資源不支持http方法'GET'。「}」 我能夠創建POST和GET沒有問題。我不知道爲什麼我不能理解PUT操作:/ – kkdeveloper7

+0

這不是REST。再次閱讀問題的標題。 –

+0

更新了控制器操作和js。同樣的問題。我得到404,當我去的網址告訴我「{」消息「:」所請求的資源不支持HTTP方法'GET'。「}」我不明白爲什麼它試圖使用GET時,即時消息告訴它使用PUT在我的控制器中。 – kkdeveloper7