Когда я запустил этот URL-адрес: /api/users/1
, он отображает только действие «Удалить», когда я использую атрибут HttpDelete. В чем причина такого поведения?Запрошенный ресурс не поддерживает метод HTTP GET
Else я получаю его сообщение: Запрошенный ресурс не поддерживает метод HTTP GET
[RoutePrefix("api/users")]
public class UserController : ApiController
{
private readonly IUserService _userService;
public UserController(IUserService userService)
{
_userService = userService;
}
[Route("")]
public HttpResponseMessage Get()
{
return Request.CreateResponse<IEnumerable<UserDTO>>(HttpStatusCode.OK, _userService.GetUsers());
}
[Route("{id:int}")]
[HttpDelete]
public HttpResponseMessage Delete(int id)
{
_userService.Delete(id);
return Request.CreateResponse(HttpStatusCode.OK, "User was deleted successfully");
}
}
Это мои маршруты:
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { controller = "Home", action = "Start", id = RouteParameter.Optional }
);
Вы видите комментарий «удален для краткости», был мой публичный HttpResponseMessage Get(), поэтому это не может быть причиной, о которой вы говорите. Я обновил свой вопрос с полным кодом (метод Get) – Elisabeth
Но вам не хватает действия GET, которое принимает параметр. На основе вашего URL/api/users/1 вы хотите передать 1 в качестве аргумента, но у вас нет действия GET, которое его принимает. Маршрутизация ищет действие, подобное 'public HttpResponseMessage Get (int id)' –
Когда я использую скрипач с api/users/1 и устанавливаю http-глагол DELETE, он работает. Но когда я запускаю api/users/1 в URL-адресе браузера, он хочет вызвать Get (int id) (как вы сказали). Означает ли это, что каждый запуск URL в браузере - это запрос GET по умолчанию? – Elisabeth