c# - 从 Controller 获取 JsonOptions

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

我在 Startup 类中设置了缩进 JSON,但如何从 Controller 中检索格式化值?

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;
    }
}

最佳答案

您可以只注入(inject) IOptions<MvcJsonOptions> 的一个实例进入你的 Controller ,像这样:

private readonly MvcJsonOptions _jsonOptions;

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

// ...

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

参见 docs有关 IOptions 的更多信息(选项模式)。

如果您只关心 Formatting , 你可以稍微简化一下,只使用 bool字段,像这样:

private readonly bool _isIndented;

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

在此示例中,不需要 GetIsIndented功能。

关于c# - 从 Controller 获取 JsonOptions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52089464/

相关文章:

angular - 在 ASP.NET Boilerplate .NET Core v3 中设置和获取 session 变量

asp.net-core - 微软 Asp.Net 5 RC1

c# - 如何使用 Spliton 和类型映射复杂对象?

c# - 不要使用 FileOpenDialog 显示网络驱动器

c# - 如何使用 WPF 使 Windows 静音?

asp.net-core - ASP.Net Core (MVC6) 无法使用种子用户登录

twitter-bootstrap - 从 ASP.Net Core 2 MVC 项目中删除 Bootstrap

asp.net-core - 如何在 ASP.NET Core 2.0 中实现 machineKey

asp.net-core - ASP.NET Core 2.0.3 ClaimsTransformer 与 HttpContextAccessor 结合使用,正在清除声明

c# - 使用 C# .NET 驱动程序 2.0 投影 mongodb 子文档