내 경로가 올바르게 구성되고 내 메소드에 데코 레이팅 된 태그가 있습니다. 여전히 “요청한 리소스가 HTTP 메서드 ‘GET’을 지원하지 않습니다.”라는 메시지가 표시됩니까?
[System.Web.Mvc.AcceptVerbs("GET", "POST")]
[System.Web.Mvc.HttpGet]
public string Auth(string username, string password)
{
// Décoder les paramètres reçue.
string decodedUsername = username.DecodeFromBase64();
string decodedPassword = password.DecodeFromBase64();
return "value";
}
내 경로는 다음과 같습니다.
config.Routes.MapHttpRoute(
name: "AuthentificateRoute",
routeTemplate: "api/game/authentificate;{username};{password}",
defaults: new { controller = "Game",
action = "Auth",
username = RouteParameter.Optional,
password = RouteParameter.Optional },
constraints: new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { controller = "Home", id = RouteParameter.Optional }
);
답변
System.Web의 속성을 사용하십시오. WebAPI 작업의 Http 네임 스페이스 :
[System.Web.Http.AcceptVerbs("GET", "POST")]
[System.Web.Http.HttpGet]
public string Auth(string username, string password)
{...}
작동하지 않는 이유는 MVC 네임 스페이스 의 속성을 사용했기 때문 System.Web.Mvc
입니다. System.Web.Http
네임 스페이스 의 클래스는 WebAPI 용 입니다.
답변
이 속성을 사용하십시오.
[System.Web.Http.HttpGet]
이 코드 줄이 필요하지 않습니다.
[System.Web.Http.AcceptVerbs("GET", "POST")]
답변
제 경우에는 경로 서명이 메소드 매개 변수와 달랐습니다. ID가 있었지만 매개 변수로 documentId를 받아 문제가 발생했습니다.
[Route("Documents/{id}")] <--- caused the webapi error
[Route("Documents/{documentId}")] <-- solved
public Document Get(string documentId)
{
..
}
답변
같은 문제가 발생했습니다. 이미 4 개의 컨트롤러가 제대로 작동하고 있지만이 컨트롤러를 추가했을 때 “요청 된 리소스가 HTTP 메서드 ‘GET’을 지원하지 않습니다”를 반환했습니다. 나는 여기와 몇 가지 다른 관련 기사에서 모든 것을 시도했지만 Dan B.가 답변에 대한 답변으로 언급했듯이 이미 다른 사람들이 잘 작동했기 때문에 솔루션에 무관심했습니다.
잠시 자리를 비운 후 돌아와서 Controller를 추가했을 때 다른 Controller가 속한 “ApiController”클래스가 아니라 “Controller”클래스 아래에 중첩되었음을 즉시 깨달았습니다. Visual Studio에서 .cs 파일을 빌드하기 위해 잘못된 스캐 폴딩 옵션을 선택했다고 가정합니다. 그래서 System.Web.Http 네임 스페이스를 포함하고 부모 클래스를 변경했으며 모든 것이 추가 특성이나 라우팅없이 작동합니다.