3.ASP.NET Core MVC配置

1.配置提供程序

配置提供程序从配置源的键值对读取配置数据。

配置提供程序配置源
Azure Key Vault 配置提供程序Azure Key Vault
Azure 应用配置提供程序Azure 应用程序配置
命令行配置提供程序命令行参数
无前缀环境变量配置提供程序无前缀环境变量
(带前缀)环境变量配置提供程序ASPNETCORE_前缀环境变量、DOTNET_前缀环境变量
文件配置提供程序INI 配置提供程序、JSON配置提供程序、XML 配置提供程序
INI 配置提供程序.ini文件
JSON配置提供程序加载顺序:appsettings.json文件、appsettings.{Environment}.json文件(appsettings.Production.json、appsettings.Development.json)。
XML 配置提供程序.xml文件
Key-per-file 配置提供程序目录文件
内存配置提供程序内存中的 .NET 集合对象
用户机密配置提供程序用户配置文件目录中的文件
自定义配置提供程序自定义源

2.选项模式

读取相关配置值的首选方法是使用选项模式。

//JSON文件
"Position": {
    "Title": "Editor",
    "Name": "Joe Smith"
  }

选项模式的原理是创建一个无构造函数的非抽象类,然后类中的字段和属性 与 JSON文件一一对应。所有公共读写属性都已绑定,但字段需后期调用 ConfigurationBinder.BindConfigurationBinder.Get<T>或 依赖注入绑定。

GetSection()会根据PositionOptions.Position返回的字符串值确定需要绑定的Section。

public class PositionOptions
{
    //对应JSON文件的Position Section
    public const string Position = "Position";

   

    //对应JSON文件的Title键
    public string Title { get; set; } = String.Empty;
    //对应JSON文件的Name键
    public string Name { get; set; } = String.Empty;
}

2.1Bind绑定法

ConfigurationBinder.Bind会根据对象类型来确定需要绑定的类。

public class Test22Model : PageModel
{
    private readonly IConfiguration Configuration;

    public Test22Model(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public ContentResult OnGet()
    {
        var positionOptions = new PositionOptions();
        Configuration.GetSection(PositionOptions.Position).Bind(positionOptions);

        return Content($"Title: {positionOptions.Title} \n" +
                       $"Name: {positionOptions.Name}");
    }
}

2.2Get<T>绑定法

ConfigurationBinder.Get<T> 绑定并返回指定的类型。 使用 ConfigurationBinder.Get<T> 可能比使用 ConfigurationBinder.Bind() 更方便。

public class Test21Model : PageModel
{
    private readonly IConfiguration Configuration;
    public PositionOptions? positionOptions { get; private set; }

    public Test21Model(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public ContentResult OnGet()
    {            
        positionOptions = Configuration.GetSection(PositionOptions.Position)
                                                     .Get<PositionOptions>();

        return Content($"Title: {positionOptions.Title} \n" +
                       $"Name: {positionOptions.Name}");
    }
}

2.3依赖注入绑定法

using ConfigSample.Options;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();

builder.Services.Configure<PositionOptions>(
    builder.Configuration.GetSection(PositionOptions.Position));

var app = builder.Build();
public class Test2Model : PageModel
{
    private readonly PositionOptions _options;

    public Test2Model(IOptions<PositionOptions> options)
    {
        _options = options.Value;
    }

    public ContentResult OnGet()
    {
        return Content($"Title: {_options.Title} \n" +
                       $"Name: {_options.Name}");
    }
}

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/csharp/aspnetcoremvc/15746.html

(0)
上一篇 2022年5月2日 01:17
下一篇 2022年5月4日 01:18

相关推荐

  • 7.ASP.NET Core MVC视图

    1.创建视图 右键单击Views文件夹-添加–新建文件夹-名称复数Movies。 右键单击刚刚新建的Views/Movies文件夹-添加–新建项-选择合适的视图选项-名称Index.cshtml–添加。 2.View()帮助方法 2.1视图发现 3.强类型数据 (viewmodel)…

  • 5.ASP.NET Core MVC控制器

    1.新建控制器 右键单击Controllers文件夹-添加–控制器。 单击MVC–控制器-选择合适的脚手架选项–添加-名称复数MoviesController.cs–添加。 2.新搭建基架的项目 右键单击Controllers文件夹-添加–新搭建基架的项目&#…

  • 4.ASP.NET Core MVC终结点路由

    1. UseRouting和UseEndpoints方法 1.1作用 路由使用一对由 UseRouting 和 UseEndpoints 注册的中间件: UseRouting 向中间件管道添加路由匹配。此中间件会查看应用中定义的终结点集,并根据请求选择最佳的终…

发表回复

登录后才能评论