模型绑定器不使用JSON POST

时间:2014-10-13 23:56:26

标签: c# json http-post model-binding asp.net-core-mvc

我通过POST发送以下JSON:

POST http://localhost:52873/news 

{"text":"testing","isPublic":true}

我的控制器:

public class NewsController : Controller
{
    // GET: /<controller>/
    [HttpGet]
    public IActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public IActionResult Post(CreatePostCommand command)
    {
        /* ...more code... */
        return new HttpStatusCodeResult(200);
    }
}

命令是:

public class CreatePostCommand
{
    public string Text { get; set; }
    public bool IsPublic { get; set; }
}

我的路由设置是VS 2014 CTP 4中的MVC模板附带的默认设置:

app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default", 
        template: "{controller}/{action}/{id?}",
        defaults: new { controller = "Home", action = "Index" });

    routes.MapRoute(
        name: "api",
        template: "{controller}/{id?}");
});

引自Getting Started with ASP.NET MVC 6

  

使用此路由模板,操作名称映射到请求中的HTTP谓词。例如,GET请求将调用名为Get的方法,PUT请求将调用名为Put的方法,依此类推。 {controller}变量仍然映射到控制器名称。

这对我来说似乎不起作用。我收到404错误。这个新的ModelBinder我错过了什么?为什么它不绑定我的JSON POST消息?

1 个答案:

答案 0 :(得分:3)

它适用于

  • 删除[HttpPost]属性和
  • 在属性类型之前添加[FromBody]属性。

更正的代码:

// No HttPost attribute here!
public IActionResult Post([FromBody]CreatePostCommand command)
{
    /* ...more code... */
    return new HttpStatusCodeResult(200);
}