102 votes

405 méthode non autorisée Web API

Cette erreur est très courante. J'ai essayé toutes les solutions et aucune n'a fonctionné. J'ai désactivé la publication WebDAV dans le panneau de configuration et ajouté ceci à mon fichier de configuration Web :

  <handlers>
  <remove name="WebDAV"/>
  </handlers>
  <modules runAllManagedModulesForAllRequests="true">
  <remove name="WebDAVModule"/>
  </modules>

L'erreur persiste. Voici le contrôleur :

   static readonly IProductRepository repository = new ProductRepository();

    public Product Put(Product p)
    {
        return repository.Add(p);
    }

Mise en œuvre de la méthode :

 public Product Add(Product item)
    {
        if (item == null)
        {
            throw new ArgumentNullException("item");
        }
        item.Id = _nextId++;
        products.Add(item);
        return item;
    }

Et c'est là que l'exception est lancée :

client.BaseAddress = new Uri("http://localhost:5106/");
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));      
var response = await client.PostAsJsonAsync("api/products", product);//405 exception

Des suggestions ?

1voto

user193061 Points 71

Assurez-vous que votre contrôleur hérite de Controller classe.

Il serait même plus fou que les choses fonctionnent localement même sans ça.

1voto

Pour ma part, mon gestionnaire de POST était de cette forme :

[HttpPost("{routeParam}")]
public async Task<ActionResult> PostActuality ([FromRoute] int routeParam, [FromBody] PostData data)

J'ai compris que je devais échanger les arguments c'est-à-dire d'abord les données du corps, puis le paramètre de la route, comme ceci :

[HttpPost("{routeParam}")]
public async Task<ActionResult> PostActuality ([FromBody] PostData data, [FromRoute] int routeParam)

1voto

netotz Points 59

Vieille question, mais aucune des réponses n'a fonctionné pour moi.

Cet article a résolu mon problème en ajoutant les lignes suivantes à web.config :

<system.webServer>
  <modules runAllManagedModulesForAllRequests="false">
    <remove name="WebDAVModule" />
  </modules>
</system.webServer>

0voto

Ankit Points 320

Vérifiez dans le fichier .csproj de votre projet et modifiez

<IISUrl>http://localhost:PORT/</IISUrl>

à l'url de votre site web comme ceci

<IISUrl>http://example.com:applicationName/</IISUrl>

0voto

Eadel Points 576

Un autre problème possible qui provoque le même comportement est celui des paramètres par défaut dans le routage. Dans mon cas, le contrôleur a été localisé et instancié correctement, mais le POST a été bloqué à cause des paramètres par défaut. Get action spécifiée :

config.Routes.MapHttpRoute(
    name: "GetAllRoute",
    routeTemplate: "api/{controller}.{ext}"/*,
    defaults: new { action = "Get" }*/ // this was causing the issue
);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X