2017-02-10 8 views
2

Я хочу создать метод для обновления в определенном поле моей записи. Я новичок в Web API 2 в ASP.Net. Я создал метод, но всегда получаю это ошибкаСоздание метода обновления в Web API 2

{"Message":"The requested resource does not support http method 'GET'."} 

Я хочу, чтобы создать пользовательский метод, как это:

 [HttpPut] 
     public string AddDeviceID(string deviceID) 
     { 

      User user = db.Users.Single(x => x.MobileUserName == "Dev" && x.MobilePassword == "123"); 
      user.MobileDeviceId = deviceID; 
      db.SaveChanges(); 

      return "success"; 

     } 

Вот мой маршрут конфигурации:

config.Routes.MapHttpRoute(
      name: "ActionApi", 
      routeTemplate: "api/{controller}/{action}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 

     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{action}/{deviceId}", 
      defaults: new { deviceId = RouteParameter.Optional } 
     ); 

Я не знаю, что мне не хватает в этом коде. Я просто следую концепции ASP.Net MVC для создания метода обновления.

Любой может предложить некоторые идеи? Заранее спасибо.

+0

Это потому, что вы делаете GET, когда вам нужно отправить запрос PUT с данными в api. – Nkosi

+0

Как вы пытались вызвать действие 'AddDeviceID()? – kat1330

ответ

0

Эта ошибка возникла из-за того, что вы выполнили запрос HTTP GET, но ваше действие украшено атрибутом [HttpPut] и может принимать только HTTP PUT. Чтобы исправить это можно реализовать функциональные возможности для выполнения запроса HTTP PUT или вы можете украсить ваши действия с [HttpGet] атрибута, как в следующем примере:

[HttpGet]   
public string AddDeviceID(string deviceID) 
{ 
     User user = db.Users.Single(x => x.MobileUserName == "Dev" && x.MobilePassword == "123"); 
     user.MobileDeviceId = deviceID; 
     db.SaveChanges(); 

     return "success"; 
} 

Как вы сделали запрос? Обратите внимание, что браузер выполнит запрос HTTP GET.

+0

спасибо, что это работает !. Но было замешательство в этом. Я бы использовал [HttpGet], потому что он будет обновлять запись, я думал, что если мы обновляем запись, мы используем [HttpPut]. А также имеет значение в конфигурации маршрута? – nyapz

+0

Я имею в виду, что я бы использовал [HttpPut], потому что он будет обновлять запись. Я смущен. – nyapz

+0

@nyapz В общем, вы должны использовать PUT для такого рода операций, но вы не можете позвонить из браузера. Как вы вызываете действие «AddDeviceID()»? – kat1330

1

Вам нужно позвонить в api с запросом HTTP PUT. Вы получаете эту ошибку, потому что вы выполняете запрос HTTP GET.

Даже если вы приняли другой ответ, вы должны использовать атрибут HttpPut, потому что он верен в значении.

From wikipedia:

GET

метод GET запрашивает представление указанного ресурса. Запросы, использующие GET, должны только извлекать данные и не должны иметь никакого другого эффекта. (Это относится и к некоторым другим методам HTTP.) [1] W3C опубликовал принципы руководства по этому различию, заявив: «Дизайн веб-приложений должен быть проинформирован вышеуказанными принципами, , а также соответствующими ограничениями. "

PUT

на запросы метода PUT, что включенный объект храниться в прилагаемом URI. Если URI ссылается на уже существующий ресурс, изменен; если URI не указывает на существующий ресурс, , то сервер может создать ресурс с этим URI.

Просто сообщите о том, как отправить HTTP PUT Request с помощью библиотеки/программного обеспечения, которое вы тестируете.

Кстати: Postman - хороший инструмент для тестирования.