ASP.NET MVC Core Web アプリケーションを作成しています。ビューに、ProductsController の Create アクションに投稿するフォームがあります。jquery 控えめな ajax を使用しているため、フォームは次のようになります。
<form asp-action="Create" data-ajax="true" data-ajax-method="post" data-ajax-success="onSuccess"></form>
私のCreateアクションは次のようになります。
[HttpPost("Products/Create")]
[ValidateAntiForgeryToken]
public IActionResult Create([Bind("Id,Name")] ProductViewModel vm)
{
}
これは完全に正常に動作します。
ただし、次の場合はそうではありません。
[HttpPost("Products/Create")]
[ValidateAntiForgeryToken]
public IActionResult Create([FromBody] ProductViewModel vm)
{
}
js コンソールに 415 (サポートされていないメディア タイプ) というエラーが表示されます。これは、フォームが投稿されたときに Content-Type application/json が設定されていないためだと思います。
Microsoft は、MVCController テンプレートを使用するときに Bind 構文を使用し、APIController テンプレートを使用するときに FromBody 構文を使用しているようです。
ほとんどのページに ajax が含まれているため、最近では MVC を使用することはほとんどありません。FromBody を使用しようとしている理由は、MVC アクションではなく API 呼び出しのように、アクション メソッドをより適切に扱うことだと思います。
また、Postman の FromBody Create アクションに content-type application/json の Json として投稿すると、完全に機能します。