2017-07-06 1 views
6

J'ai ce contrôleur (simplifié) ASP.NET Core Web API. Les actions GET et POST fonctionnent bien sur ma propre machine. Cependant, déployé sur Azure, seule l'action GET fonctionne correctement. L'action POST aboutit à un 404. Des idées?ASP.NET Core Web API HTTP POST renvoie 404 dans Azure

namespace Foo 
{ 
    using System; 
    using System.Collections.Generic; 
    using Microsoft.AspNetCore.Mvc; 

    [RequireHttps] 
    [Produces("application/json")] 
    [Area("Foo")] 
    [Route("[area]/Api/[controller]")] 
    public class BarController : Controller 
    { 
    [HttpGet] 
    public IEnumerable<string> Get() 
    { 
     return new[] {"Hello", "World!"}; 
    } 

    [HttpPost] 
    public void Post([FromBody] InputModel model) 
    { 
    } 

    public class InputModel 
    { 
     public int Foo { get; set; } 
    } 
    } 
} 

Il est une application ASP.NET MVC base ciblant le cadre complet de .NET. Il est déployé en tant qu'applet Web Azure. J'ai testé les deux actions sur ma machine locale et dans Azure en utilisant Postman.

+0

Vérifiez votre configuration web et voyez si les requêtes POST sont autorisées – Nkosi

+0

J'ai découvert que j'obtiens un 415 "Unsupported Media Type" si je change le type de contenu à presque tout autre application/json (ce qui donne le 404). Mais cela ne résout toujours pas mon problème. –

+0

Est-ce que vous postez quelque chose que ModelBinder peut lier à la classe '' 'InputModel'''? –

Répondre

2

Il semble dans certaines circonstances, lorsqu'une erreur se produit dans un contrôleur, retourne noyau ASP.NET 404 au lieu d'un plus approprié 500. Vérifiez ce post:

ASP.NET Core 2.0 site POST request resulting in 404 on Azure

Dans la réponse, il a été causée par une mauvaise chaîne de connexion à la base de données (ce qui peut être le cas lorsque vous publiez une application dans un autre environnement), mais cela peut être autre chose.

Vous ne savez pas pourquoi cela ne renvoie pas une erreur normale, peut-être qu'il essaie de rediriger vers une page d'erreur personnalisée ou quelque chose comme ça.

Pour vérifier cette suggestion, essayez de tout supprimer de votre contrôleur POST pour isoler un problème. S'il ne retourne pas 404, cela signifie que quelque chose dans le contrôleur déclenche une exception.

+0

Merci. Ça fait longtemps, mais oui, ta réponse correspond parfaitement à ce que j'ai vécu autant que je m'en souvienne :-) –