요청 된 리소스는 HTTP 메서드 'GET'을 지원하지 않습니다.


102

내 경로가 올바르게 구성되고 내 메소드에 데코 레이팅 된 태그가 있습니다. 여전히 "요청한 리소스가 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 }
);

답변:


226

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 용 입니다.


11
젠장 .. 고마워! 이렇게 사소한 일에 시간을 낭비 할 수있는 방법을 믿어주지 않을 것 같았습니다 ..
Rushino

1
사실, 이것이 정답 인 이유에 대한 설명 이 여기에 반드시 필요합니다!
Jaxidian

6
설명과 함께 수정 된 답변입니다.
Maggie Ying

2
RouteConfig.cs에서 [System.Web.Http.AcceptVerbs ( "GET", "POST")] 및 [System.Web.Http.HttpGet]을 지정하여 각 API에 추가 할 필요가 없습니다.
Girish Gupta 2015 년

8
이 프로젝트의 10 개 API 중 하나에서만이 작업을 수행해야하는 이유는 무엇입니까? 다른 9 개의 api와 똑같은 방식으로 api를 만들었습니다. 얼마나 실망 스럽습니까.
Dan Beaulieu

3

이 속성을 사용하십시오.

[System.Web.Http.HttpGet]

이 코드 줄이 필요하지 않습니다.

[System.Web.Http.AcceptVerbs("GET", "POST")]

3

제 경우에는 경로 서명이 메소드 매개 변수와 달랐습니다. ID가 있었지만 매개 변수로 documentId를 받아 문제가 발생했습니다.

[Route("Documents/{id}")]   <--- caused the webapi error
[Route("Documents/{documentId}")] <-- solved
public Document Get(string documentId)
{
  ..
}

축복합니다 :) +1
Shai Cohen

2

같은 문제가 발생했습니다. 이미 4 개의 컨트롤러가 제대로 작동하고 있지만이 컨트롤러를 추가했을 때 "요청 된 리소스가 HTTP 메서드 'GET'을 지원하지 않습니다"를 반환했습니다. 나는 여기와 몇 가지 다른 관련 기사에서 모든 것을 시도했지만 Dan B.가 답변에 대한 답변으로 언급했듯이 이미 다른 사람들이 잘 작동했기 때문에 솔루션에 무관심했습니다.

잠시 자리를 비운 후 돌아와서 Controller를 추가했을 때 다른 Controller가 속한 "ApiController"클래스가 아니라 "Controller"클래스 아래에 중첩되었음을 즉시 깨달았습니다. Visual Studio에서 .cs 파일을 빌드하기 위해 잘못된 스캐 폴딩 옵션을 선택했다고 가정합니다. 그래서 System.Web.Http 네임 스페이스를 포함하고 부모 클래스를 변경했으며 모든 것이 추가 특성이나 라우팅없이 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.