我正在创建一个 ASP.NET MVC Core Web 应用程序。我的视图中有一个表单,它发布到 ProductsController 中的 Create 操作。我正在使用 jquery unobtrusive ajax,所以我的表单如下所示:
<form asp-action="Create" data-ajax="true" data-ajax-method="post" data-ajax-success="onSuccess"></form>
这是我的创建操作的样子:
[HttpPost("Products/Create")]
[ValidateAntiForgeryToken]
public IActionResult Create([Bind("Id,Name")] ProductViewModel vm)
{
}
这完全正常。
但是,以下内容不会:
[HttpPost("Products/Create")]
[ValidateAntiForgeryToken]
public IActionResult Create([FromBody] ProductViewModel vm)
{
}
我在 js 控制台中收到错误:415(不支持的媒体类型)。我假设这是因为当表单发布时,它没有被设置为 w/Content-Type application/json。
似乎微软在使用他们的 MVCController 模板时使用了 Bind 语法,而他们在使用他们的 APIController 模板时使用了 FromBody 语法。
我现在很少使用 MVC,因为我的大部分页面都涉及 ajax。我相信我更好地将我的操作方法更像 API 调用而不是 MVC 操作,这就是我尝试使用 FromBody 的原因。
此外,当我使用内容类型 application/json 以 Json 形式在 Postman 中发布 FromBody Create 操作时,它可以完美运行。