ASP.NET Core | 問題排除隨手記 - API 回應 HTTP Status 415 Unsupported Media Type

Last updated on

有時呼叫 API 時,對方回應的 HTTP Status 與我們所預期的不同。剛好最近有遇到,就順手記錄下來。

🔖 長話短說 🔖

  • 415: Unsupported Media Type 錯誤,請檢查 Content-TypeContent 與 API 要求的規範是否相同。

Status 415: Unsupported Media Type

基本上,會發生 HTTP Status 415,其原因不外乎是:

Content-Type 設定錯誤,造成無法解析 Content 資料

若 API 要求的 Content-Typeapplication/json,但是實際上發送的是 application/x-www-form-urlencoded,就會發生這個錯誤。

可以從 Request Headers 內,看到 Content-Type 的設定。

▶ 傳送 Content 的資料格式錯誤,與 API 接收的資料不符

這個情況,有兩種可能:

要嘛就是 Content 內的資料格式,與 Content-Type 設定的不符。API 要求 Josn 的資格格式,但是發送的內容卻是 a=1&b=2 的格式,就會發生這個錯誤。

再不然,就是 Content 內的資料格式,與 API 要求的不符。若 API 要求的資料格式為數字,但是發送的內容卻是字串,就會發生這個錯誤。

若 API 是要開發給自已使用,可以自行設定 Content-TypeContent 的格式。但若是提供第三方的服務 callback 呼叫,就要配合第三方的發送格式。

application/x-www-form-urlencoded

[HttpPost("Verify")]
[Consumes("application/x-www-form-urlencoded")]
public async Task<IActionResult> callback(
	[FromQuery] RedirectParameters parameters,
    [FromForm] VerifyResult result)
{
	// 略
}

若 Content-Type 是 application/x-www-form-urlencoded,則要使用 [FromForm] 來接收。

application/json

[HttpPost("Verify")]
public async Task<IActionResult> callback(
	[FromQuery] RedirectParameters parameters,
	[FromBody] VerifyResult result)
{
	// 略
}

若 Content-Type 是 application/json,則要使用 [FromBody] 來接收。

補充資料

▶ 延伸閱讀