亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 JsonConverter 中注入/訪問 HttpContext?

如何在 JsonConverter 中注入/訪問 HttpContext?

C#
江戶川亂折騰 2021-06-25 18:18:50
在我的 ASP.NET Core 2 應用程序中,每次特定類型的對象被序列化(通過 JSON.NET)時,我想在路徑名字符串前面寫入當前主機名。對于此任務,我需要以某種方式將 注入HttpContext到我的自定義JsonConverter 中以獲取主機。然而,由于我沒有訪問HttpContext內startup.cs ConfigureServices(其中轉換器注冊到MvcJsonOptions),我不知道如何注入HttpContext到我的JsonConverter。
查看完整描述

1 回答

?
慕碼人8056858

TA貢獻1803條經驗 獲得超6個贊

您可以將服務IHttpContextAccessor注入到轉換器的構造函數中。


類似于以下內容:


public class MyJsonConverter : JsonConverter

{

    private readonly IHttpContextAccessor httpContextAccessor;


    public MyJsonConverter(IHttpContextAccessor httpContextAccessor)

    {

        this.httpContextAccessor = httpContextAccessor;

    }


    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)

    {

        var context = httpContextAccessor.HttpContext;


        //...

    }


    //...

}

然后,您可以在Startup.cs 中HttpContextAccessor注冊轉換器時傳遞該服務ConfigureServices


var httpContextAccessor = new HttpContextAccessor();

services.AddSingleton<IHttpContextAccessor>(httpContextAccessor);

services.AddJsonOptions(options => {

    options.SerializerSettings.Converters.Add(new MyJsonConverter(httpContextAccessor));

});

請注意,您不應嘗試HttpContext在轉換器的構造函數中訪問。在寫入或讀取方法中訪問它,因為這很可能在上下文已經填充的請求期間被調用。


查看完整回答
反對 回復 2021-06-27
  • 1 回答
  • 0 關注
  • 325 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號