이 URL을 실행할 때 : /api/users/1
HttpDelete-Attribute를 사용할 때만 삭제 동작으로 매핑됩니다. 이 행동의 이유는 무엇입니까? 그렇지요청한 리소스가 HTTP 메소드를 지원하지 않습니다. GET
나는 그의 메시지가 : 요청 된 자원은 HTTP 방법이 내 루트입니다
[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");
}
}
GET 지원하지 않습니다, HTTP 동사는 액션 이름과 일치합니다 관례
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()이 있었기 때문에 "간략히하기 위해 삭제됨"주석이 표시되므로 이것이 사용자가 말하는 이유가 될 수 없습니다. 내 질문을 전체 코드로 업데이트했습니다 (메소드 가져 오기) – Elisabeth
그러나 매개 변수를 허용하는 GET 조치가 누락되었습니다. URL/api/users/1을 기준으로 1을 인수로 전달하려고하지만 GET 액션을 허용하지 않습니다. 라우팅은'public HttpResponseMessage Get (int id)'와 같은 액션을 찾고 있습니다. –
api/users/1에서 바이올린을 사용하고 http 동사를 DELETE로 설정하면 작동합니다. 하지만 브라우저 url에서 api/users/1을 트리거하면 Get (int id)을 트리거하려고합니다 (말한대로). 브라우저에서 실행되는 모든 URL은 기본적으로 GET 요청입니까? – Elisabeth