文章目錄
ASP.NET Core WebAPI 回應 406 Not Acceptable
照著之前筆記 從 Empty 建立 ASP.NET Core Web API 從空專案開始建立 ASP.NET Core WebAPI ,過程中一切順利直到開始加入商業邏輯時卻出現意料外的錯誤,雖然事後覺得我應該要馬上聯想的問題原因,但事實上並沒有,紀錄一下加深印象
基本環境說明
- macOS Mojave 10.14.5
- .NET Core SDK 2.2.107 (.NET Core Runtime 2.2.5)
NuGet package
- Microsoft.AspNetCore.Mvc.FormattersJson 2.2.0
錯誤訊息
訊息內容
406 Not Acceptable
錯誤截圖
問題發生原因
先檢視 kestrel log 的異常
warn: Microsoft.AspNetCore.Mvc.Infrastructure.DefaultOutputFormatterSelector[1] No output formatter was found for content type '' to write the response. warn: Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor[1] No output formatter was found for content type '' to write the response.
發現問題
從 log 中我們可以看得出來,在 response 時並沒有任何的 content-type,而這個問題的源頭其實可以從 ASP.NET Core 中 AddMvc() 與 AddMvcCore() 的差別 中看得出來,因為使用
AddMvcCore()
而少了builder.AddJsonFormatters();
如何解決問題
安裝需要的 formatter
以 json 為例
Microsoft.AspNetCore.Mvc.FormattersJson
Package Manager
Install-Package Microsoft.AspNetCore.Mvc.Formatters.Json
.NET CLI
dotnet add package Microsoft.AspNetCore.Mvc.Formatters.Json --version 2.2.0
註冊 formatter
調整
Startup.cs
中的ConfigureServices
方法public void ConfigureServices(IServiceCollection services) { services.AddMvcCore().AddJsonFormatters(); }
心得
原本以為我看過資料,遇到相關問題我應該可以快速想到問題發生的原因,想不到還是卡了一下XD
不過錯誤都已經發生了還是要想辦法改善,後來仔細檢討後發現,我之前 trace code 時是直接透過 GitHub 的 search in repository,結果就找到 master 的 code,而我應該要換到 tag 2.2.5
才是我正使用的版本呀 真是糟糕@@” 幸虧有筆記 才發現之前的錯誤
參考資訊
文章作者 Yowko Tsai
上次更新 2021-11-03
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。