FromBody路由不适用于ASP.NET Core

时间:2019-10-29 23:57:44

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

我正在尝试使用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调用它:

  
    

Invoke-RestMethod -Uri http://localhost:9000/api/emailsch/job-方法发布-Body'Hello there'

  

结果是:

  
    

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 个答案:

答案 0 :(得分:1)

由于未指定任何InputFormatters,因此出现500个内部服务器错误

至少需要一个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软件包。