2

我正在创建一个 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 操作时,它可以完美运行。

4

0 回答 0