Moja trasa jest poprawnie skonfigurowana, a moje metody mają ozdobiony tag. Nadal otrzymuję komunikat „Żądany zasób nie obsługuje metody 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";
}
Oto moje trasy:
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 }
);
c#
routing
asp.net-web-api
Rushino
źródło
źródło
po prostu użyj tego atrybutu
nie potrzebuję tej linii kodu:
źródło
W moim przypadku sygnatura trasy różniła się od parametru metody. Miałem id, ale akceptowałem documentId jako parametr, który spowodował problem.
źródło
Miałem ten sam problem ... Miałem już 4 kontrolery działające i działające dobrze, ale kiedy dodałem ten, zwróciło to „Żądany zasób nie obsługuje metody HTTP„ GET ””. Wypróbowałem wszystko tutaj oraz w kilku innych istotnych artykułach, ale rozwiązanie było mi obojętne, ponieważ, jak wspomniał Dan B. w odpowiedzi, inne już działały dobrze.
Odszedłem na chwilę, wróciłem i od razu zdałem sobie sprawę, że kiedy dodałem kontroler, był on zagnieżdżony w klasie „Controller”, a nie w klasie „ApiController”, w której znajdowały się moje inne kontrolery. Zakładam, że wybrałem złą opcję rusztowania do zbudowania pliku .cs w programie Visual Studio. Więc dołączyłem przestrzeń nazw System.Web.Http, zmieniłem klasę nadrzędną i wszystko działa bez dodatkowych atrybutów lub routingu.
źródło
Rozwiązano ten problem przez użycie
http(s)
podczas uzyskiwania dostępu do punktu końcowego. Trasa, do której miałem dostęp, nie była dostępnahttp
. Więc powiedziałbym, że sprawdź protokoły, dla których trasa jest dostępna.źródło