La risorsa richiesta non supporta il metodo HTTP "GET"


103

Il mio percorso è configurato correttamente e i miei metodi hanno il tag decorato. Ricevo ancora il messaggio "La risorsa richiesta non supporta il metodo 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";
}

Ecco i miei percorsi:

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

Risposte:


227

Si prega di utilizzare gli attributi dal System.Web. Spazio dei nomi HTTP nelle azioni WebAPI:

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

Il motivo per cui non funziona è perché stavi utilizzando gli attributi che provengono dallo spazio dei nomi MVCSystem.Web.Mvc . Le classi nello System.Web.Httpspazio dei nomi sono per WebAPI .


11
Dannazione .. grazie! stavo per impazzire lol incredibile come puoi perdere tempo con cose così piccole ..
Rushino

1
In effetti, una spiegazione del perché questa è la risposta corretta è certamente necessaria qui!
Jaxidian

6
Risposta modificata con spiegazione.
Maggie Ying

2
posso specificare [System.Web.Http.AcceptVerbs ("GET", "POST")] e [System.Web.Http.HttpGet] in RouteConfig.cs in modo che non sia necessario aggiungerlo in ogni API.
Girish Gupta

8
Perché ho dovuto farlo solo in una delle mie 10 API per questo progetto? Ho creato l'API esattamente nello stesso modo delle altre 9 API. Quanto è frustrante.
Dan Beaulieu,

3

usa questo attributo

[System.Web.Http.HttpGet]

non serve questa riga di codice:

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

3

Nel mio caso, la firma del percorso era diversa dal parametro del metodo. Avevo id, ma stavo accettando documentId come parametro, che ha causato il problema.

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

ti benedica :) +1
Shai Cohen

2

Ho riscontrato lo stesso problema .. Avevo già 4 controller funzionanti e funzionavano bene, ma quando ho aggiunto questo è tornato "La risorsa richiesta non supporta il metodo HTTP" GET "". Ho provato di tutto qui e in un paio di altri articoli pertinenti, ma ero indifferente alla soluzione poiché, come ha menzionato Dan B. in risposta alla risposta, ne avevo già altri che funzionavano bene.

Mi sono allontanato per un po ', sono tornato indietro e ho capito subito che quando ho aggiunto il controller era annidato nella classe "Controller" e non nella classe "ApiController" in cui si trovavano gli altri controller. Presumo di aver scelto l'opzione di scaffolding sbagliata per creare il file .cs in Visual Studio. Quindi ho incluso lo spazio dei nomi System.Web.Http, cambiato la classe genitore e tutto funziona senza gli attributi aggiuntivi o il routing.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.