2

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 として投稿すると、完全に機能します。

4

0 に答える 0