2 votes

Les routes avec FromBody ne fonctionnent pas avec ASP.NET Core

Je suis en train d'essayer ASP.NET Core MVC et je n'arrive pas à faire fonctionner une route avec un paramètre marqué avec le symbole [FromBody] . J'utilise ASP.NET Core 2.2 sous .NET Framework (complet, pas core). Voici l'intégralité de mon contrôleur :

using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;

namespace EmailSch.Api.Controllers
{
    [ApiController]
    [Route("/api")]
    public class EmailJobController : ControllerBase
    {
        public EmailJobController() { }

        [Route("emailsch/job"), HttpPost]
        public IActionResult RunEmailJob([FromBody]string options)
        {
            return Ok();
        }
    }
}

J'essaie de l'appeler depuis PowerShell en utilisant :

Invoke-RestMethod -Uri http://localhost:9000/api/emailsch/job -Method Post -Body 'Hello there' (Bonjour)

Le résultat est :

Invoke-RestMethod : Le serveur distant a renvoyé une erreur : (500) Internal Server Error.

Aucune exception n'est levée dans mon code et aucun point d'arrêt n'est déclenché. Si je supprime le paramètre :

public IActionResult RunEmailJob()
{
   return Ok("Hi");
}

Il fonctionne bien. Y a-t-il quelque chose que je dois configurer dans mon Startup pour que cela fonctionne ? Voici l'ensemble de ma classe Startup :

    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvcCore();
        }

        public void Configure(IApplicationBuilder app)
        {
            app.UseMvcWithDefaultRoute();
        }
    }

3voto

MegaTron Points 3484

Vous avez obtenu une erreur de serveur interne 500 parce que vous n'avez pas spécifié d'InputFormatters.

Au moins un Microsoft.AspNetCore.Mvc.Formatters.IInputFormatter est nécessaire pour se lier à l'organisme.

Pour ajouter le formateur json, utilisez :

services.AddMvcCore().AddJsonFormatters();

ou ajouter un MVC complet avec des formateurs par défaut

service.AddMvc();

puis utiliser

Invoke-RestMethod -Uri http://localhost:9000/api/emailsch/job -Method Post -ContentType 'application/json' -Body 'Hello there'

Remarque : vous devez également installer le programme Microsoft.AspNetCore.Mvc.Formatters.Json Paquet NuGet.

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