1. ホーム
  2. c#

[解決済み】ASP.NET CoreのフォームPOSTでHTTP 415 Unsupported Media Typeのレスポンスが返ってくる。

2022-04-01 17:22:18

質問

フォームのPOST HTTPリクエストの送信 ( Content-Type: application/x-www-form-urlencoded ) を以下のコントローラに渡すと、結果的に HTTP 415 Unsupported Media Type(サポートされていないメディアタイプ レスポンスを返します。

public class MyController : Controller
{
    [HttpPost]
    public async Task<IActionResult> Submit([FromBody] MyModel model)
    {
        //...
    }
}

フォームの投稿HTTPヘッダ。

POST /submit HTTP/1.1
Host: example.com:1337
Connection: keep-alive
Content-Length: 219
Pragma: no-cache
Cache-Control: no-cache
Origin: https://example.com:1337
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Referer: https://example.com:1337/submit
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.8,nl;q=0.6

これは、.NET 4.6 上の ASP.NET MVC 5 で動作していたものです。

解決方法は?

フォームの場合は [FromForm] 属性の代わりに [FromBody] 属性を使用します。

以下のコントローラは、ASP.NET Core 1.1 で動作します。

public class MyController : Controller
{
    [HttpPost]
    public async Task<IActionResult> Submit([FromForm] MyModel model)
    {
        //...
    }
}

[FromXxx] は、コントローラにアノテーションを付ける場合に必要です。 [ApiController] . 通常のビューコントローラの場合は、省略可能です。