簡體   English   中英

在ASP.NET Core Web App中,AddJsonOptions和AddJsonFormatters之間的區別是什么?

[英]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
};

干杯!

AddJsonOptions

這提供了通過在服務集合上調用.AddMvc()來配置已經設置的serailization設置和合同解析器的方法。 您可以從源代碼中看到, AddJsonFormatters()已經調用了AddMvc() 因此,JSON.net將用於使用DefaultContractResolver進行序列化, 提供默認設置 但是,您可以在這種情況下使用AddJsonOptions()來覆蓋默認值並指定所需的合約解析程序和序列化程序設置,例如

services.AddMvc()
    .AddJsonOptions(o => 
    {
        o.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
        o.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
    });

AddJsonFormatters

如果您在服務集合上使用准系統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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM