使用 FromBody 的路线不适用于 ASP.NET Core

Route with FromBody doesn't work with ASP.NET Core

我正在尝试 ASP.NET 核心 MVC,但无法获得使用标有 [FromBody] 的参数的路由。我在 .NET Framework 上使用 ASP.NET Core 2.2 运行(完整版,非核心版)。这是我的整个控制器:

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 -Method Post -Body 'Hello there'

结果是:

Invoke-RestMethod : The remote server returned an error: (500) Internal Server Error.

我的代码没有抛出异常,也没有触发断点。如果我删除参数:

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

它工作正常。我需要在我的 Startup 中设置什么才能让它工作吗?这是我的整个 Startup class:

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

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

您收到 500 内部服务器错误,因为您没有指定任何 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 包。