Маршрут с FromBody не работает с ASP.NET Core - PullRequest
1 голос
/ 30 октября 2019

Я пробую ASP.NET Core MVC и не могу получить маршрут, работающий с параметром, отмеченным [FromBody]. Я использую ASP.NET Core 2.2, работающий на .NET Framework (полный, а не основной). Вот весь мой контроллер:

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();
        }
    }
}

Я пытаюсь вызвать его из PowerShell, используя:

Invoke-RestMethod -Uri http://localhost:9000/api/emailsch/job -Metod Post -Body«Привет!»

Результат:

Invoke-RestMethod: удаленный сервер возвратил ошибку: (500) Внутренняя ошибка сервера.

В моем коде нет исключений и не срабатывают точки останова. Если я уберу параметр:

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

Работает нормально. Что-нибудь, что мне нужно настроить в моем автозагрузке, чтобы это работало? Вот весь мой класс Startup:

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

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

1 Ответ

1 голос
/ 30 октября 2019

Вы получили 500 Internal Server Error, потому что вы не указали никаких InputFormatters

Требуется хотя бы один Microsoft.AspNetCore.Mvc.Formatters.IInputFormatter для привязки из тела.

Чтобы добавить форматер json, используйте:

services.AddMvcCore().AddJsonFormatters();

или добавьте полный MVC с форматерами по умолчанию

service.AddMvc();

, затем используйте

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

Примечание. Вам также потребуется установить пакет Microsoft.AspNetCore.Mvc.Formatters.Json NuGet.

...