B12*_*ter 3 c# dependency-injection json.net asp.net-core asp.net-core-2.0
在我的ASP.NET Core 2应用程序中,每当某种类型的对象被序列化时(通过JSON.NET),我想在路径名字符串前写入当前主机名。
对于此任务,我需要以某种方式将其HttpContext注入我的自定义JsonConverter中以获取主机。然而,由于我没有访问HttpContext内startup.cs ConfigureServices(其中转换器注册到MvcJsonOptions),我不知道如何注入HttpContext到我的JsonConverter。
您可以将服务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;
//...
}
//...
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以在Startup.cs中HttpContextAccessor注册转换器时通过服务ConfigureServices
var httpContextAccessor = new HttpContextAccessor();
services.AddSingleton<IHttpContextAccessor>(httpContextAccessor);
services.AddJsonOptions(options => {
options.SerializerSettings.Converters.Add(new MyJsonConverter(httpContextAccessor));
});
Run Code Online (Sandbox Code Playgroud)
请注意,您不应尝试访问HttpContext转换器的构造函数中的。用write或read方法访问它,因为很可能在请求中已经填充了上下文的情况下调用它。
| 归档时间: |
|
| 查看次数: |
640 次 |
| 最近记录: |