首页 > 解决方案 > 从控制器获取 JsonOptions

问题描述

我在 Startup 类中设置缩进 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;
    }
}

标签: c#asp.net-coreasp.net-core-2.0

解决方案


您可以将一个实例注入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函数。


推荐阅读