2016-05-31 3 views
1

Я пытаюсь сделать PUT призыв к моей службе, чтобы обновить userREST HTTP положить вызов

Я получаю 404, когда код попадет мой URL, но в Дев инструментах, если я нажму URL он не на это на самом деле попадет мой контроллер , Я думаю, что я передаю свою модель неправильно как параметр, может кто-то, пожалуйста, указать мне правильное направление, пожалуйста, я не уверен, что я делаю неправильно.

вот мой вызов службы

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

Поскольку ваш URL-адрес заканчивается '/ {user}', который является владельцем места. –

+0

@DannyChen Я обновил свой код с out/{user} до сих пор с тем же вопросом – kkdeveloper7

ответ

0

Вам нужно указать идентификатор пользователя в конце URL-адреса. Ваши методы требуют 2 параметра. Один пользователь и один пользователь.

Возможно, вы также захотите пересмотреть структуру своего URL-адреса.

+0

Но что, если хотите передать мой объект в метод put – kkdeveloper7

+0

Вы передаете объект в тело и передаете id в URL-адресе. Поэтому ваш метод требует 2 параметра. Отредактировал мой ответ. –

+0

Извините, возможно, ne noob question.s o put dont взять объект как единственный параметр? – 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 (Not Found). когда я нажимаю на URL-адрес, он показывает, что он дает мне это «{« Сообщение »:« Запрошенный ресурс не поддерживает метод http «GET». »« Мне удалось создать POST и GET без проблем. Я не знаю, почему я не могу понять операцию PUT:/ – kkdeveloper7

+0

Это не REST. Прочтите название вопроса еще раз. –

+0

обновлено действие контроллера и js. такой же выпуск. я получаю 404, и когда я перехожу к url, я говорю «{« Сообщение »:« Запрошенный ресурс не поддерживает http-метод «GET». »« Я не понимаю, почему он пытается использовать GET, когда я говорю ему использовать PUT в моем контроллере. – kkdeveloper7

Смежные вопросы