Для конвертации в зависимости от заголовка пользовательских запросов, невозможно установить AddJsonOptions
.Вы не смогли получить доступ к HttpContext во время ConfigureServices
, поскольку во время этого процесса нет запросов.
В качестве обходного пути попробуйте зарегистрировать IHttpContextAccessor
как
public class FirstConverter : JsonConverter
{
private readonly IHttpContextAccessor _httpContextAccessor;
public FirstConverter(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
public override bool CanConvert(Type objectType)
{
var header = _httpContextAccessor.HttpContext.Request.Headers;
throw new NotImplementedException();
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
А затем в ConfigureServices
services.AddMvc().AddJsonOptions(options =>
{
var httpContextAccessor = services.BuildServiceProvider().GetRequiredService<IHttpContextAccessor>();
// If(my_custom_header_value == "use_first_converter")
options.SerializerSettings.Converters.Add(new FirstConverter(httpContextAccessor));
// Else
//options.SerializerSettings.Converters.Add(new FirstConverter());
});
Проверьте, чтобы конвертировать в var header = _httpContextAccessor.HttpContext.Request.Headers;