gpt4 book ai didi

c# - 如何在 JsonConverter 中注入(inject)/访问 HttpContext?

转载 作者:行者123 更新时间:2023-11-30 14:46:09 24 4
gpt4 key购买 nike

在我的 ASP.NET Core 2 应用程序中,每次序列化某种类型的对象(通过 JSON.NET)时,我都想在路径名字符串前面写入当前主机名。

对于此任务,我需要以某种方式将 HttpContext 注入(inject)到我的自定义 JsonConverter 中来捕获主人。但是,由于我无权访问 startup.cs ConfigureServices 中的 HttpContext(转换器已注册到 MvcJsonOptions), 我不知道如何将 HttpContext 注入(inject)我的 JsonConverter

最佳答案

您可以将服务 IHttpContextAccessor 注入(inject)转换器的构造函数。

类似下面的内容:

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 中的 ConfigureServices 中注册您的转换器时传递 HttpContextAccessor 服务

var httpContextAccessor = new HttpContextAccessor();
services.AddSingleton<IHttpContextAccessor>(httpContextAccessor);
services.AddJsonOptions(options => {
options.SerializerSettings.Converters.Add(new MyJsonConverter(httpContextAccessor));
});

请注意,您不应尝试在转换器的构造函数中访问 HttpContext。在 write 或 read 方法中访问它,因为在上下文已经填充的请求期间很可能会调用它。

关于c# - 如何在 JsonConverter 中注入(inject)/访问 HttpContext?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50456180/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com