为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 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 关注
  • 228 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信