【问题标题】:Route with FromBody doesn't work with ASP.NET Core带有 FromBody 的路由不适用于 ASP.NET Core
【发布时间】:2019-10-29 23:57:44
【问题描述】:

我正在试用 ASP.NET Core 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 从 PowerShell 调用它:

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

结果是:

Invoke-RestMethod : 远程服务器返回错误:(500) Internal Server Error.

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

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

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

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

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

【问题讨论】:

    标签: asp.net-core asp.net-mvc-5 kestrel-http-server


    【解决方案1】:

    您收到 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 包。

    【讨论】:

    • 你救了我的命 :) 非常感谢!
    • 很高兴能对@Sammy 有所帮助
    猜你喜欢
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多