Запрошенный ресурс не поддерживает HTTP-метод 'GET'

Мой маршрут правильно настроен, и мои методы имеют украшенный тег. Я все еще получаю "Запрошенный ресурс не поддерживает 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 }
);

Ответ 1

Пожалуйста, используйте атрибуты из пространства имен System.Web. Http в действиях вашего WebAPI:

    [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.

Ответ 2

просто используйте этот атрибут

[System.Web.Http.HttpGet]

не нужна эта строка кода:

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

Ответ 3

В моем случае подпись маршрута отличалась от параметра метода. У меня был идентификатор, но я принимал documentId в качестве параметра, который вызвал проблему.

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

Ответ 4

У меня возникла та же проблема.. У меня уже было 4 контроллера, которые работали и работали просто отлично, но когда я добавил этот контроллер, он возвратил "Запрошенный ресурс не поддерживает HTTP-метод GET". Я попробовал все здесь и в нескольких других соответствующих статьях, но был безразличен к решению, так как, как упоминал Дэн Б. в ответе, у меня уже были другие, работающие нормально.

Я ушел на некоторое время, вернулся и сразу понял, что когда я добавил контроллер, он был вложен в класс "Controller", а не в класс "ApiController", под которым находились мои другие контроллеры. Я предполагаю, что выбрал неправильную опцию скаффолдинга для сборки файла .cs в Visual Studio. Поэтому я включил пространство имен System.Web.Http, изменил родительский класс, и все работает без дополнительных атрибутов или маршрутизации.