菜鸟入门【ASP.NET Core】5:命令行配置、Json文件配置、Bind读取配置到C#实例、在Core Mvc中使用Options

命令行配置

我们通过vs2017创建一个控制台项目CommandLineSample

可以看到现在项目以来的是dotnet core framework

我们需要吧asp.net core引用进来,我们可以直接添加Microsoft.AspNetCore.All

安装完成之后,我们可以通过using Microsoft.Extensions.Configuration;来进行后续的配置

static void Main(string[] args)
        {
            var builder = new ConfigurationBuilder()//初始化一个ConfigurationBuilder
                .AddCommandLine(args);//扩展函数

            var configuration = builder.Build();//拿到configuration

            //查看configuration里面有什么
            Console.WriteLine($"name:{configuration["name"]}");
            Console.WriteLine($"age:{configuration["age"]}");

            Console.ReadLine();
        }

这时候直接执行的话不会有结果,因为我们没有对configuration进行配置

我们可以在调试里面进行参数配置,运行结果

configuration一般以键值对的形式存在,我们如果要给他传递默认的参数的话,可以用一个dictionary来传递,然后以内存的形式添加进去

using System;
using System.Collections.Generic;
using Microsoft.Extensions.Configuration;

namespace CommandLineSample
{
    class Program
    {
        static void Main(string[] args)
        {
            var settings = new Dictionary<string, string>
            {
                {"name","菜鸟起飞"},
                {"age","18"}
            };

            var builder = new ConfigurationBuilder()//初始化一个ConfigurationBuilder
                .AddInMemoryCollection(settings)//以内存的形式添加进来
                .AddCommandLine(args);//扩展函数

            var configuration = builder.Build();//拿到configuration

            //查看configuration里面有什么
            Console.WriteLine($"name:{configuration["name"]}");
            Console.WriteLine($"age:{configuration["age"]}");

            Console.ReadLine();
        }
    }
}

这个时候我们就可以将调试里面的参数去掉了,直接用控制台启动项目,可以看到传递参数和不传递参数会有不同的配置显示效果

Json文件配置

新建控制台项目JsonConfigSample

我们需要吧asp.net core引用进来,我们可以直接添加Microsoft.AspNetCore.All

然后新建json文件 class.json 并生成到bin

{
  "ClassNo": "1",
  "ClassDesc": "菜鸟入门ASP.NET Core",

  "Students": [
    {
      "name": "老王",
      "age": "17"
    },
    {
      "name": "老李",
      "age": "16"
    },
    {
      "name": "老牛",
      "age": "17"
    }
  ]
}

然后读取class.json文件,读取结果

Bind读取配置到C#实例

新建控制台项目OptionsBindSample

选择空的模板

这个时候创建的Startup.cs文件中没有Configuration,由于我们要用到Configuration,所以我们要用到依赖注入,把Configuration加进来

这个时候我们就可以在Startup.cs中使用Configuration了

新建Class.class班级类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace OptionsBindSample
{
    public class Class
    {
        public int ClassNo { get; set; }

        public string ClassDesc { get; set; }

        public List<Student> Students { get; set; }
    }

    public class Student
    {
        public string Name { get; set; }

        public string Age { get; set; }
    }
}
添加asp.net配置文件appsettings.json
{
  "ClassNo": "1",
  "ClassDesc": "菜鸟入门ASP.NET Core",

  "Students": [
    {
      "name": "老王",
      "age": "17"
    },
    {
      "name": "老李",
      "age": "16"
    },
    {
      "name": "老牛",
      "age": "17"
    }
  ]
}

为什么要添加配置文件呢?我们可以看下图:因为在WebHost启动的时候默认是没有添加配置文件的,但是当项目启动的时候,我们会默认读取appsettings.json这里的内容到Configuration里面去,是通过CreateDefaultBuilder这个方法把他们加载进去的

这时候我们可以在Startup.cs当中将读取的appsetting的Configuration绑定到对应的Class实例化模型,并打印出来,运行后现实吧效果,显示的格式忘调了,各位可以尝试自己去调一调

在Core Mvc中使用Options

添加MVC中间件(Middleware)

首先,我们在前面的OptionsBindSample项目中新建文件夹:Controllers、Views。添加一个HomeController。给HomeController的Index动作添加Index视图,

接下来在Startup.cs中注释掉以下内容,因为如果不注释的话管道会一直被占用,导致我们的mvc无法访问

然后在Startup.cs的ConfigureServices方法中添加mvc

接下来在Startup.cs的Configure方法中配置使用MVC默认路由

控制器依赖注入

通过依赖注入的方式在HomeController中注入myClass。只不过这次我们不能用bing的方法,而是用IOption<T>泛型方法将班级注入进去

这时候我们返回强类型视图

依赖注入和视图完成之后呢,我们要在Startup.cs的ConfigureServices方法中注册一下Class到Options,将Configuration传进去,这样在HomeController调用IOptions<Class>的时候,才会能从配置中拿到Class的内容

启动之后效果

【小扩展】:我们也可以把注入直接取出来,通过依赖注入框架直接在视图中显示出来

新建控制器Home2Controller,不需要添加任何依赖注入的配置。创建Index视图,直接在视图中引用IOtions<T>以强类型视图的方式注入进去

运行效果

谈一谈 Program.cs中的BuildWebHost方法

当我们创建mvc项目的时候,自动创建的Program.cs中的BuildWebHost是下面这个样子的,无法访问其他的*,json配置文件

对其进行修改来读取特定的*.json配置文件

原文地址:https://www.cnblogs.com/Agui520/p/8341979.html

时间: 2024-11-05 14:56:44

菜鸟入门【ASP.NET Core】5:命令行配置、Json文件配置、Bind读取配置到C#实例、在Core Mvc中使用Options的相关文章

java学习总结(16.05.08)在windows下使用cmd命令行对java文件进行编译和执行

windows下利用cmd命令行可以调用jdk里的javac.exe和java.exe对java文件进行编译和执行,前提是jdk已成功安装并正确配置相关环境变量(jdk安装与环境变量的配置方法:http://blog.csdn.net/qq_32099621/article/details/51339868) 下面来说一下windows下如何使用cmd命令行来编译执行java文件 首先找到需要编译和执行的java文件 这里我要编译和执行这个java文件 按组合键win+r调出"运行",

Linux服务器通过aws命令行上传文件至S3

目的Linux服务器通过AWS命令行上传文件至S3 配置打开你的AWS控制台: 连接你的Linux服务器,按照以下步骤操作: # 安装pip yum -y install python-pip   # 安装awscli pip install awscli   # 初始化配置 aws configure # 做这一步时系统会要求你输入"访问密钥ID"."私有访问密钥"."默认区域名称"."默认输出格式",前两个在创建IAM用户

Cmd命令行编译c#文件

使用命令行编译C#文件的方法: 首先,在系统变量的Path变量中添加csc.exe文件路径 路径大概是这个样子:C:\Windows\Microsoft.NET\Framework64\v4.0.30319;  (.net版本也许不同) 在cmd中输入csc.exe验证是否成功. cs文件生成exe文件:(若要编译生成EXE文件则源文件中需包含main 方法) csc /out:file.exe  file.cs       //使用 /out 指定输出的文件 如果编译的stu.cs 和 fil

4.1 对每个命令行参数打印文件类型

file/filetype.c #include "apue.h" int main(int argc, char *argv[]) { int i; struct stat buf; char *ptr; for (i = 1; i < argc; i++) { printf("%s: ", argv[i]); if (lstat(argv[i], &buf) < 0) { err_ret("lstat error"); c

MySQL命令行导入sql文件时出现乱码解决方案

Note: sql> source F:weibo.sql(执行相关sql文件) sql> select * from sina into outfile "/weibo.txt"(导出相应数据到C:的weibo.txt) 1. mysql 5.0后其客户端仅支持gbk,故可在sql> set names gbk; 例如: set names gbk; /* Navicat MySQL Data Transfer Source Server : localhost_3

命令行导入SQL文件

摘要:把数据库导出为XX.sql格式的数据库文件,导入到另外一个数据库中的时候,总是无法全部导入.及时用mysql的命令界面导入依然是无法全部导入.老师告诉我:在命令行中运行的效率和成功率是最快和最高的.所以查了一下如何用命令行导入SQL文件,方法很简单! 1.首先运行cmd(注意此处要用管理员身份运行)或者“开始菜单”-->附件-->命令提示符(右键)-->以管理员身份运行 2.进入mysql的bin目录 3.运行:mysql -u root -proot test <I:\re

c#调用 WinRAR.exe以命令行形式实现文件、文件夹的解压缩

在实际项目应用中会偶尔使用文件的压缩上传以及服务器端的加压处理,故写此文记录以备不时之需. 1.自己编写的ZipHelper类. 1 public static class ZipHelper 2 { 3 private static string pathExe = AppDomain.CurrentDomain.BaseDirectory + @"Resource\WinRAR.exe"; 4 /// <summary> 5 /// 使用Gzip方法压缩文件 6 ///

关于jmeter命令行执行.jmx文件出现Error in NonGUIDriver java.lang.RuntimeException: Could not find the TestPlan class的问题

jmeter命令行执行.jmx文件时,有时回出现Error in NonGUIDriver java.lang.RuntimeException: Could not find the TestPlan class的错误 目前出现此错误的原因是在jmeter3.0及以下版本存在bug 对于使用UI界面生成.jmx时,请在testplan层做保存,而非在threads层做保存,如下图

使用jq工具在Shell命令行处理JSON数据

因为最近要处理一些 JSON 数据格式,一大早经过一番搜索后,最终找到了 jq 这个很棒的工具.jq 允许你直接在命令行下对 JSON 进行操作,包括分片.过滤.转换等等. 首先在mac下安装jq,使用brew install jq就可以了,前提是安装了homebrew,如果在linux ubuntu下,应该可以使用sudo apt-get install jq安装. 让我们通过几个例子来说明 jq 的功能: 一.输出格式化,漂亮的打印效果 如果我们用文本编辑器打开 JSON,有时候可能看起来会