Как настроить конвертеры Json.NET в зависимости от заголовка пользовательского запроса - PullRequest
0 голосов
/ 16 апреля 2019

Мне нужно использовать разные JSON.NET JSON Converter, зависит от заголовка. Некоторые думают так:

services
    .AddMvcCore()                
    .AddJsonOptions(options =>
    {
        // If(my_custom_header_value == "use_first_converter")
        options.SerializerSettings.Converters.Add(new FirstConverter());
        // Else
        //options.SerializerSettings.Converters.Add(new FirstConverter());
    })

1 Ответ

0 голосов
/ 16 апреля 2019

Для конвертации в зависимости от заголовка пользовательских запросов, невозможно установить 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;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...