.net core 2.0 mvc 获取配置信息

mvc_core_config

html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video { margin: 0; padding: 0; border: 0 }
body { font-family: Helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 1.6; color: #333; background-color: #fff; padding: 20px; max-width: 960px; margin: 0 auto }
body>*:first-child { margin-top: 0 !important }
body>*:last-child { margin-bottom: 0 !important }
p,blockquote,ul,ol,dl,table,pre { margin: 15px 0 }
h1,h2,h3,h4,h5,h6 { margin: 20px 0 10px; padding: 0; font-weight: bold }
h1 tt,h1 code,h2 tt,h2 code,h3 tt,h3 code,h4 tt,h4 code,h5 tt,h5 code,h6 tt,h6 code { font-size: inherit }
h1 { font-size: 28px; color: #000 }
h2 { font-size: 24px; border-bottom: 1px solid #ccc; color: #000 }
h3 { font-size: 18px }
h4 { font-size: 16px }
h5 { font-size: 14px }
h6 { color: #777; font-size: 14px }
body>h2:first-child,body>h1:first-child,body>h1:first-child+h2,body>h3:first-child,body>h4:first-child,body>h5:first-child,body>h6:first-child { margin-top: 0; padding-top: 0 }
a:first-child h1,a:first-child h2,a:first-child h3,a:first-child h4,a:first-child h5,a:first-child h6 { margin-top: 0; padding-top: 0 }
h1+p,h2+p,h3+p,h4+p,h5+p,h6+p { margin-top: 10px }
a { color: #4183C4; text-decoration: none }
a:hover { text-decoration: underline }
ul,ol { padding-left: 30px }
ul li>:first-child,ol li>:first-child,ul li ul:first-of-type,ol li ol:first-of-type,ul li ol:first-of-type,ol li ul:first-of-type { margin-top: 0px }
ul ul,ul ol,ol ol,ol ul { margin-bottom: 0 }
dl { padding: 0 }
dl dt { font-size: 14px; font-weight: bold; font-style: italic; padding: 0; margin: 15px 0 5px }
dl dt:first-child { padding: 0 }
dl dt>:first-child { margin-top: 0px }
dl dt>:last-child { margin-bottom: 0px }
dl dd { margin: 0 0 15px; padding: 0 15px }
dl dd>:first-child { margin-top: 0px }
dl dd>:last-child { margin-bottom: 0px }
pre,code,tt { font-size: 12px; font-family: Consolas, "Liberation Mono", Courier, monospace }
code,tt { margin: 0 0px; padding: 0px 0px; white-space: nowrap; border: 1px solid #eaeaea; background-color: #f8f8f8 }
pre>code { margin: 0; padding: 0; white-space: pre; border: none; background: transparent }
pre { background-color: #f8f8f8; border: 1px solid #ccc; font-size: 13px; line-height: 19px; overflow: auto; padding: 6px 10px }
pre code,pre tt { background-color: transparent; border: none }
kbd { background-color: #DDDDDD; background-image: linear-gradient(#F1F1F1, #DDDDDD); background-repeat: repeat-x; border-color: #DDDDDD #CCCCCC #CCCCCC #DDDDDD; border-style: solid; border-width: 1px; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; line-height: 10px; padding: 1px 4px }
blockquote { border-left: 4px solid #DDD; padding: 0 15px; color: #777 }
blockquote>:first-child { margin-top: 0px }
blockquote>:last-child { margin-bottom: 0px }
hr { clear: both; margin: 15px 0; height: 0px; overflow: hidden; border: none; background: transparent; border-bottom: 4px solid #ddd; padding: 0 }
table th { font-weight: bold }
table th,table td { border: 1px solid #ccc; padding: 6px 13px }
table tr { border-top: 1px solid #ccc; background-color: #fff }
table tr:nth-child(2n) { background-color: #f8f8f8 }
img { max-width: 100% }

在.net core mvc中 配置文件格式更改为json且移除了ConfigurationManager.AppSettings[xmlkey]的方法,
那么,如何来获取配置信息呢?

第一步 将json文件添加到应用程序中

<default code>
    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .Build();

如果是使用默认的方法来启动的,则可以跳过此步

<reason>
    查看源码 在 CreateDefaultBuilder方法中已使用添加配置文件

      //配置信息处理 -- 用于第二步的读取配置信息
      .ConfigureAppConfiguration((Action<WebHostBuilderContext, IConfigurationBuilder>) ((hostingContext, config) =>
      {
             //注入运行环境
            IHostingEnvironment hostingEnvironment = hostingContext.HostingEnvironment;
              //加载配置文件
            config.AddJsonFile("appsettings.json", true, true).AddJsonFile(string.Format("appsettings.{0}.json", (object) hostingEnvironment.EnvironmentName), true, true);
          //根据运行环境加载相应文件
            if (hostingEnvironment.IsDevelopment())
            {
              Assembly assembly = Assembly.Load(new AssemblyName(hostingEnvironment.ApplicationName));
              if (assembly != (Assembly) null)
                config.AddUserSecrets(assembly, true);
            }

            config.AddEnvironmentVariables();
            if (args == null)
              return;
            config.AddCommandLine(args);
      }))

自定义添加配置文件请参考以上代码

第二步 读取配置信息

<code>

    <Startup>

    //由于在程序启动时已经配置了configuration 则可以直接通过构造方法获取配置信息

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

    public IConfiguration Configuration { get; }

第三步 在Controller 获取配置信息

<code>

    <Startup>

        <method --> ConfigureServices>

        //添加选项
        services.AddOptions();

        //将配置信息进行DI注入
        services.Configure<AppSetting>(Configuration.GetSection(nameof(AppSetting)));

<相关方法说明>
    GetSection:
         key-value 取值
         类似于Dictionary取值的操作

    Configure:
        进行DI注入

        关键性代码:
            //进行DI注入  AddSingleton 全局共享一个   IOptionsChangeTokenSource<TOptions>  注入参数对应的type
            services.AddSingleton<IOptionsChangeTokenSource<TOptions>>
                ((IOptionsChangeTokenSource<TOptions>)
                new ConfigurationChangeTokenSource<TOptions>(name, config)
                );

            即实际上还是利用AddSingleton注入实现

        <source code>
            /// <summary>
            /// Registers a configuration instance which TOptions will bind against. 将配置实例作为option绑定到参数上
            /// </summary>
            /// <typeparam name="TOptions">The type of options being configured.</typeparam>
            /// <param name="services">The <see cref="T:Microsoft.Extensions.DependencyInjection.IServiceCollection" /> to add the services to.</param>
            /// <param name="config">The configuration being bound.</param>
            /// <returns>The <see cref="T:Microsoft.Extensions.DependencyInjection.IServiceCollection" /> so that additional calls can be chained.</returns>
            public static IServiceCollection Configure<TOptions>(this IServiceCollection services, IConfiguration config) where TOptions : class
            {
              return services.Configure<TOptions>(Microsoft.Extensions.Options.Options.DefaultName, config);
            }

            /// <summary>
            /// Registers a configuration instance which TOptions will bind against.同上
            /// </summary>
            /// <typeparam name="TOptions">The type of options being configured.</typeparam>
            /// <param name="services">The <see cref="T:Microsoft.Extensions.DependencyInjection.IServiceCollection" /> to add the services to.</param>
            /// <param name="name">The name of the options instance.</param>
            /// <param name="config">The configuration being bound.</param>
            /// <returns>The <see cref="T:Microsoft.Extensions.DependencyInjection.IServiceCollection" /> so that additional calls can be chained.</returns>
            public static IServiceCollection Configure<TOptions>(this IServiceCollection services, string name, IConfiguration config) where TOptions : class
            {
              if (services == null)
                throw new ArgumentNullException(nameof (services));
              if (config == null)
                throw new ArgumentNullException(nameof (config));
                    //进行DI注入  AddSingleton 全局共享一个   IOptionsChangeTokenSource<TOptions>  注入参数对应的type
                    services.AddSingleton<IOptionsChangeTokenSource<TOptions>>((IOptionsChangeTokenSource<TOptions>) new ConfigurationChangeTokenSource<TOptions>(name, config));
              return services.AddSingleton<IConfigureOptions<TOptions>>((IConfigureOptions<TOptions>) new NamedConfigureFromConfigurationOptions<TOptions>(name, config));
            }

    <Controller>
        public abstract class BaseController : Controller
        {

            protected  AppSetting AppSetting { get; set; }

            protected BaseController(IOptions<AppSetting> option) => AppSetting = option.Value;

        }

    intro:由于在mvc经常会使用配置信息,于是我便将获取配置信息的相关处理封装在一个抽象控制器中,故只需要在使用配置信息的控制器中继承此控制器即可

然后就可以在控制器中通过AppSetting获取配置信息了

扩展说明

在Startup中直接获取配置文件:

public Startup(IApplicationEnvironment appEnv, IHostingEnvironment env) {

   _config = new ConfigurationBuilder()
            .AddJsonFile("config.json")
            .AddJsonFile("appsettings.json")
        .AddEnvironmentVariables()
        .Build();
}

[https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/configuration/?view=aspnetcore-2.1&tabs=basicconfiguration](https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/configuration/?view=aspnetcore-2.1&tabs=basicconfiguration "官方教程")


备注:其中使用的AppSetting 即 我配置信息对应的实体类 【可根据实际情况进行命名】

欢迎各位大佬评论并指出我的错误 :)


author:monster

since:6/4/2018 11:12:45 AM

direction:.net core 2.0 mvc 配置文件的使用

原文地址:https://www.cnblogs.com/monster17/p/9132680.html

时间: 2024-10-27 12:15:54

.net core 2.0 mvc 获取配置信息的相关文章

.Net Standard(.Net Core)实现获取配置信息

一.前言 在.Net Framework框架有专门获取webconfig配置的方法供我们使用,但是在.Net Core或者.Net Standard中没有可以直接使用的方法来获取配置文件信息,下面就来实现获取配置信息. 二.获取配置信息的实现 在.Net Core中,他的配置信息的载体是一个json文件,我们现在就计划所有项目(包含.Net Framework和.Net Standard(.Net Core)框架)都是json文件作为配置的载体. 首先通过Nuget加载如下的包: Install

.net core 2.0 mvc 初步学习

mvc_study html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,tab

JavaWeb学习之Servlet(四)----ServletConfig获取配置信息、ServletContext的应用

[声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:http://www.cnblogs.com/smyhvae/p/4140877.html 联系方式:[email protected] [正文] 一.ServletConfig:代表当前Servlet在web.xml中的配置信息(用的不多) String getServletName()  -- 获取当前Servlet在web.xml中配置的名字 String getInitParameter(String name) -- 获取当前S

JavaWeb学习之Servlet(四)----ServletConfig获取配置信息、ServletContext的应用(转)

JavaWeb学习之Servlet(四)----ServletConfig获取配置信息.ServletContext的应用 [声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:http://www.cnblogs.com/smyhvae/p/4140877.html [正文] 一.ServletConfig:代表当前Servlet在web.xml中的配置信息(用的不多) String getServletName()  -- 获取当前Servlet在web.xml中配置的名字 String

jeasyopc放在tomcat上不能获取配置信息的问题

jeasyopc放在tomcat上不能获取配置信息,折腾了好久,是原代码中的一个问题,tomcat下找不到系统路径,所以导致找不到配置文件.</span> 你需要修改jeasyopc.jar下的javafish.clients.opc.property.PropertyLoader.java /** * Get properties for class (propsName) * * @param propsName class package * @return properties Pro

ASP.NET Core 2.0 MVC项目实战

 一.前言 毕业后入职现在的公司快有一个月了,公司主要的产品用的是C/S架构,再加上自己现在还在学习维护很老的delphi项目,还是有很多不情愿的.之前实习时主要是做.NET的B/S架构的项目,主要还是用的那种传统的开发模式,只有一个项目用到了Web API,自己负责后端的接口功能实现.既然现在没办法改变现状,那就先改变自己吧.定了个计划,下班后慢慢的开始学习ASP.NET Core Web API和Vue,准备从前端到后端自己写一个小项目玩玩,毕竟代码这个东西,时间长了是会忘的.       

ASP.NET CORE 1.0 MVC API 文档用 SWASHBUCKLE SWAGGER实现

from:https://damienbod.com/2015/12/13/asp-net-5-mvc-6-api-documentation-using-swagger/ 代码生成工具: https://github.com/NSwag/NSwag This article shows how to document your ASP.NET Core 1.0 MVC API using Swagger with Swashbuckle. Per default, it does not us

使用VS Code开发.Net Core 2.0 MVC Web应用程序教程之一

好吧,现在我们假设你已经安装好了VS Code开发工具..Net Core 2.0预览版的SDK dotnet-sdk-2.0.0(注意自己的操作系统),并且已经为VS Code安装好了C#扩展(在VS Code的扩展菜单中输入OmniSharp,安装扩展即可) 一.我们先在我们的电脑硬盘的某个神奇的目录下新建一个文件夹.我把这个地方选在D:\WorkTest下,创建的文件夹名称为MyCMS.注意,这一步不是在VS Code中完成的,貌似VS Code中不能创建文件夹. 二.在VS Code开发

Servlet获取配置信息(ServletConfig)和ServletContext

ServletConfig ServletConfig:当Servlet容器初始化Servlet时,Servlet容器会给Servlet的init方法传入一个ServletConfig.ServletConfig封装可以通过@WebServlet或者部署描述符传给Servlet的配置信息.这样传入的每条信息就叫做一条初始参数,要在Servlet容器传给Servlet的init方法的ServletConfig中调用getInitParameter方法.getInitParameter的方法签名如下