Получить JsonOptions от контроллера - PullRequest
0 голосов
/ 30 августа 2018

Я установил отступ JSON в классе запуска, но как мне получить значение форматирования из контроллера?

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc()
                .AddWebApiConventions()
                .AddJsonOptions(options=> options.SerializerSettings.Formatting=Newtonsoft.Json.Formatting.Indented);
    }

}


public class HomeController : Controller
{
    public bool GetIsIndented()
    {
        bool isIndented = ????
        return isIndented;
    }
}

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Вы можете просто вставить экземпляр IOptions<MvcJsonOptions> в свой контроллер, например, так:

private readonly MvcJsonOptions _jsonOptions;

public HomeController(IOptions<MvcJsonOptions> jsonOptions, /* ... */)
{
    _jsonOptions = jsonOptions.Value;
}

// ...

public bool GetIsIdented() =>
    _jsonOptions.SerializerSettings.Formatting == Formatting.Indented;

См. документы для получения дополнительной информации о IOptions (шаблон параметров).

Если все, что вас волнует, это Formatting, вы можете немного упростить и просто использовать поле bool, например:

private readonly bool _isIndented;

public HomeController(IOptions<MvcJsonOptions> jsonOptions, /* ... */)
{
    _isIndented = jsonOptions.Value.SerializerSettings.Formatting == Formatting.Indented;
}

В этом примере нет необходимости в функции GetIsIndented.

0 голосов
/ 30 августа 2018

Один из вариантов - создать класс, в котором вы объявляете текущие значения конфигурации

public class MvcConfig
{
    public Newtonsoft.Json.Formatting Formatting { get; set; }
}

Затем создайте его экземпляр в методе configure, где вы также зарегистрируете класс как одиночный

public void ConfigureServices(IServiceCollection services)
{
    var mvcConfig = new MvcConfig
    {
        Formatting = Newtonsoft.Json.Formatting.Indented
    };

    services.AddMvc()
            .AddWebApiConventions()
            .AddJsonOptions(options=> options.SerializerSettings.Formatting=mvcConfig.Formatting);

    services.AddSingleton(mvcConfig);
}

Затем введите его в контроллер и используйте его

public class HomeController : Controller
{
    private readonly MvcConfig _mvcConfig;
    public HomeController(MvcConfig mvcConfig)
    {
        _mvcConfig = mvcConfig;
    }
    public bool GetIsIndented()
    {
        return _mvcConfig.Formatting == Newtonsoft.Json.Formatting.Indented;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...