İstenen kaynak, 'GET' HTTP yöntemini desteklemiyor


103

Rotam doğru şekilde yapılandırıldı ve yöntemlerim dekore edilmiş etikete sahip. Hala "İstenen kaynak HTTP yöntemini 'GET' desteklemiyor" mesajını alıyorum?

[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";
}

İşte rotalarım:

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 }
);

Yanıtlar:


227

Lütfen System.Web'deki öznitelikleri kullanın. WebAPI eylemlerinizdeki Http ad alanı:

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

Çalışmamasının nedeni, MVC ad alanından gelen öznitelikleri kullanıyor olmanızdır System.Web.Mvc. AdSystem.Web.Http alanındaki sınıflar WebAPI içindir .


11
Lanet olsun .. teşekkürler! çılgın olmak üzereydim lol inanılmaz bu kadar küçük şeylerle nasıl vakit
kaybedebilirsin

1
Nitekim, burada neden doğru cevap olduğuna dair bir açıklama kesinlikle gereklidir!
Jaxidian

6
Açıklama ile yanıt düzenlendi.
Maggie Ying

2
RouteConfig.cs'de [System.Web.Http.AcceptVerbs ("GET", "POST")] ve [System.Web.Http.HttpGet] belirtebilir miyim, böylece her API'de bunu eklememe gerek kalmaz.
Girish Gupta

8
Bunu neden bu proje için 10 API'mden sadece birinde yapmam gerekiyordu? API'yi diğer 9 apiste olduğu gibi yarattım. Ne kadar sinir bozucu.
Dan Beaulieu

3

sadece bu özelliği kullan

[System.Web.Http.HttpGet]

bu kod satırına gerek yok:

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

3

Benim durumumda, yol imzası yöntem parametresinden farklıydı. Kimliğim vardı, ancak documentId'yi parametre olarak kabul ediyordum, bu soruna neden oldu.

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

çok yaşa :) +1
Shai Cohen

2

Aynı sorunu yaşıyordum .. Zaten 4 denetleyicim çalışıyor ve gayet iyi çalışıyordu ama bunu eklediğimde "İstenen kaynak HTTP yöntemini 'GET' desteklemiyor" döndürdü. Her şeyi burada ve birkaç ilgili makalede denedim, ancak çözüme kayıtsız kaldım, çünkü Dan B.'nin cevaba yanıt olarak belirttiği gibi, zaten başkalarının da iyi çalışmasını sağladım.

Bir süre uzaklaştım, geri döndüm ve hemen anladım ki Controller'ı eklediğimde diğer Controllers'imin altında olduğu "ApiController" sınıfının değil "Controller" sınıfının altına yerleştirildi. Visual Studio'da .cs dosyasını oluşturmak için yanlış yapı iskelesi seçeneğini seçtiğimi varsayıyorum. Bu yüzden System.Web.Http ad alanını dahil ettim, ana sınıfı değiştirdim ve her şey ek özellikler veya yönlendirme olmadan çalışıyor.


0

http(s)Uç noktaya erişirken kullanarak bu sorunu çözdü . Erişmekte olduğum rota üzerinden kullanılamıyordu http. Bu yüzden, rotanın mevcut olduğu protokolleri doğrulayın derim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.