Запитаний ресурс не підтримує HTTP-метод 'GET'


103

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

Відповіді:


227

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

    [System.Web.Http.AcceptVerbs("GET", "POST")]
    [System.Web.Http.HttpGet]
    public string Auth(string username, string password)
    {...}

Причина, чому вона не працює, полягає в тому, що ви використовували атрибути, що знаходяться з простору імен MVCSystem.Web.Mvc . Класи в System.Web.Httpпросторі імен призначені для WebAPI .


11
Чорт .. дякую! я збирався зійти з розуму, хай неймовірно, як ти можеш витрачати час на такі дрібні речі ..
Rushino

1
Дійсно, пояснення, чому це правильна відповідь, безумовно, потрібне саме тут!
Jaxidian

6
Відредагована відповідь із поясненням.
Меггі Ін

2
чи можу я вказати [System.Web.Http.AcceptVerbs ("GET", "POST")] та [System.Web.Http.HttpGet] у RouteConfig.cs, щоб мені не потрібно було додавати це у кожному API.
Гіріш Гупта

8
Чому мені потрібно було зробити це лише в одній із моїх 10 апс для цього проекту? Я створив api точно так само, як і в інших 9 apis. Як засмучує.
Dan Beaulieu

3

просто використовуйте цей атрибут

[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)
{
  ..
}

благослови вас :) +1
Шай Коен

2

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

Я пішов на деякий час, повернувся і одразу зрозумів, що коли я додав контролер, він був вкладений у клас "Контролер", а не в клас "ApiController", під яким знаходились інші мої контролери. Я припускаю, що я вибрав неправильний варіант риштування для складання .cs-файлу у Visual Studio. Тому я включив простір імен System.Web.Http, змінив батьківський клас і все працює без додаткових атрибутів або маршрутизації.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.