我正在尝试使用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();
}
}
答案 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软件包。