我通过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消息?
答案 0 :(得分:3)
它适用于
[HttpPost]
属性和[FromBody]
属性。更正的代码:
// No HttPost attribute here!
public IActionResult Post([FromBody]CreatePostCommand command)
{
/* ...more code... */
return new HttpStatusCodeResult(200);
}