it-swarm.com.de

Die angeforderte Ressource unterstützt die HTTP-Methode 'GET' nicht.

Meine Route ist korrekt konfiguriert und meine Methoden haben das dekorierte Tag. Ich erhalte immer noch die Meldung "Die angeforderte Ressource unterstützt die HTTP-Methode 'GET'" nicht?

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

Hier sind meine Routen:

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

Bitte verwenden Sie die Attribute aus dem Namespace System.Web .Http für Ihre WebAPI-Aktionen:

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

Der Grund, warum es nicht funktioniert, liegt darin, dass Sie die Attribute verwendet haben, die aus dem Namespace MVCSystem.Web.Mvc stammen. Die Klassen im Namespace System.Web.Http beziehen sich auf WebAPI.

206
Maggie Ying

In meinem Fall unterschied sich die Routensignatur vom Methodenparameter. Ich hatte eine id, aber ich akzeptierte documentId als Parameter, der das Problem verursacht hat. 

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

Ich hatte das gleiche Problem. Ich hatte bereits 4 Controller, die einwandfrei funktionierten, aber als ich dieses hinzufügte, wurde "Die angeforderte Ressource unterstützte die HTTP-Methode 'GET' nicht" zurückgegeben. Ich habe alles hier und in ein paar anderen relevanten Artikeln ausprobiert, war aber der Lösung gleichgültig, da, wie Dan B. als Antwort auf die Antwort erwähnte, ich bereits andere hatte, die gut funktionierten. 

Ich ging eine Weile weg, kam zurück und merkte sofort, dass ich, als ich den Controller hinzufügte, unter der Klasse "Controller" und nicht unter der Klasse "ApiController" verschachtelt war, unter der sich meine anderen Controller befanden. Ich gehe davon aus, dass ich die falsche Scaffolding-Option gewählt habe, um die CS-Datei in Visual Studio zu erstellen. Also habe ich den Namespace System.Web.Http eingefügt, die übergeordnete Klasse geändert und alles funktioniert ohne die zusätzlichen Attribute oder das Routing.

0
Cameron

verwenden Sie einfach dieses Attribut 

[System.Web.Http.HttpGet]

brauche diese Codezeile nicht:

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