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 ?

6voto

FrankyHollywood Points 106

Cette erreur peut également se produire lorsque vous essayez de vous connecter en http alors que le serveur est en https.

C'était un peu déroutant parce que mes requêtes d'obtention étaient OK, le problème n'était présent qu'avec les post-requêtes.

4voto

Sako73 Points 2098

J'obtenais le message 405 sur mon appel GET, et le problème s'est avéré que j'ai nommé le paramètre dans la méthode GET côté serveur Get(int formId) et j'avais besoin de changer l'itinéraire, ou de le renommer. Get(int id) .

4voto

Tom Stickel Points 4201

Vous pouvez également obtenir l'erreur 405 si votre méthode attend un paramètre et que vous ne le passez pas.

Cela ne fonctionne PAS (erreur 405)

Vue HTML/Javascript

$.ajax({
         url: '/api/News',
         //.....

Web Api :

public HttpResponseMessage GetNews(int id)

Ainsi, si la signature de la méthode est comme ci-dessus, vous devez le faire :

Vue HTML/Javascript

$.ajax({
         url: '/api/News/5',
         //.....

4voto

Monolithcode Points 358

J'interviens tardivement, mais comme rien de ce qui précède n'était viable ou ne fonctionnait dans la plupart des cas, voici comment j'ai finalement résolu le problème.

Sur le serveur sur lequel le site/service était hébergé, une fonctionnalité était nécessaire ! L'ACTIVATION HTTP ! !!

Gestionnaire de serveur > Gérer > Ajouter des rôles et des fonctions > suivant suivant suivant jusqu'à ce que vous arriviez à Fonctions > Sous .NET (chaque version), cochez Activation HTTP. Notez également qu'il y a une option cachée sous >net > WCF Services.

Cela a alors fonctionné instantanément ! Ça faisait fondre mon cerveau

4voto

roylac Points 71

Si vous avez une route comme

[Route("nuclearreactors/{reactorId}")]

Vous devez utiliser exactement le même nom de paramètre dans la méthode, par ex.

public ReactorModel GetReactor(reactorId)
{
 ...
}

Si vous ne passez pas exactement le même paramètre, vous risquez d'obtenir l'erreur "405 method not allowed" car la route ne correspondra pas à la demande et WebApi touchera une méthode de contrôleur différente avec une méthode HTTP autorisée différente.

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