it-swarm-eu.dev

La risorsa richiesta non supporta il metodo HTTP 'GET'

Il mio percorso è configurato correttamente e i miei metodi hanno il tag decorato. Ricevo ancora "La risorsa richiesta non supporta il messaggio HTTP 'GET'" messaggio?

[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 }
);
91
Rushino

Utilizzare gli attributi dallo spazio dei nomi System.Web .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 usando gli attributi che provengono dallo spazio dei nomi MVCSystem.Web.Mvc. Le classi nello spazio dei nomi System.Web.Http sono per WebAPI.

206
Maggie Ying

Nel mio caso, la firma del percorso era diversa dal parametro del metodo. Ho avuto l'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)
{
  ..
}
0
Armando Servin

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

Mi sono allontanato per un po ', sono tornato e mi sono subito reso conto che quando ho aggiunto il controller è stato annidato sotto la classe "Controller" e non con "ApiController" che i miei altri controller erano sotto. Suppongo di aver scelto l'opzione di impalcatura errata 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 o il routing aggiuntivi.

0
Cameron

basta usare questo attributo 

[System.Web.Http.HttpGet]

non ho bisogno di questa riga di codice:

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