![](/img/trans.png)
[英]AddJsonOptions for MvcJsonOptions in Asp.Net Core 2.2
[英]In an ASP.NET Core Web App, what's the difference between AddJsonOptions and AddJsonFormatters?
我試圖控制所有 json輸出設置,就像正常的HTTP 200 OK結果一樣,當模型驗證失敗時(HTTP 400 BAD請求)等。
我在startup.cs
遇到了這兩個方法: -
AddJsonOptions(options => ...)
AddJsonFormatters(options => ...)
有人可以解釋這兩者之間的區別嗎? 為什么我會使用一個而不是另一個?
FWIW,我也試圖使用Newtonsoft JSON作為我的json提供商,其設置如下:
var settings = new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver(),
Formatting = Formatting.None,
NullValueHandling = NullValueHandling.Ignore,
DateFormatHandling = DateFormatHandling.IsoDateFormat
};
干杯!
這提供了通過在服務集合上調用.AddMvc()
來配置已經設置的serailization設置和合同解析器的方法。 您可以從源代碼中看到, AddJsonFormatters()
已經調用了AddMvc()
。 因此,JSON.net將用於使用DefaultContractResolver進行序列化, 並提供默認設置 。 但是,您可以在這種情況下使用AddJsonOptions()
來覆蓋默認值並指定所需的合約解析程序和序列化程序設置,例如
services.AddMvc()
.AddJsonOptions(o =>
{
o.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
o.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
});
如果您在服務集合上使用准系統AddMvcCore()
,則默認情況下不會設置JSON序列化中間件的格式化( 請參閱GitHub repo上的源代碼 )。 因此,您需要調用AddJsonFormatters()
以顯式設置和配置解析程序和序列化程序設置:
services.AddMvcCore()
.AddJsonFormatters(o =>
{
o.ContractResolver = new CamelCasePropertyNamesContractResolver();
o.NullValueHandling = NullValueHandling.Ignore;
});
您可以看到這兩種方法非常相似。 它們都存在的唯一原因是因為AddMvcCore()
允許您設置或創建自己的序列化中間件。 如果你喜歡准系統設置是AddMvcCore()
提供,但是要使用提供的JSON序列化格式AddMvc()
則只是調用services.AddMvcCore().AddJsonFormatters()
有關AddMvc()
和AddMvcCore()
之間差異的更深入描述,請參閱優秀文章, 了解AddMvc()和AddMvcCore()之間的區別是什么?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.