1.Startup.cs 下代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Configuration; namespace OptionsBindSample
{
public class Startup
{
/// <summary>
/// 添加构造方法用来获取配置信息
/// </summary>
public IConfiguration Configuration { get; set; }
public Startup(IConfiguration configuration)
{
Configuration = configuration;
} // This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
//把配置信息注入到Configure中
services.Configure<Class>(Configuration);
//添加MVC,依赖注入的配置
services.AddMvc();
} // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
} //启动默认路由
app.UseMvcWithDefaultRoute(); //app.Run(async (context) =>
//{
// var myClass = new Class();
// Configuration.Bind(myClass);//绑定基础信息
// //输出json配置到页面
// await context.Response.WriteAsync($"ClassNo {myClass.ClassNo}");
// await context.Response.WriteAsync($"ClassDesc {myClass.ClassDesc}");
// await context.Response.WriteAsync($"myClass Count {myClass.Students.Count}");
//});
}
}
}

2.创建HomeController添加以下代码

using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options; namespace OptionsBindSample.Controllers
{
public class HomeController : Controller
{
private readonly Class _myClass;
public HomeController(IOptions<Class> options)
{
_myClass = options.Value;
} public IActionResult Index()
{
return View(_myClass);
}
}
}

3.视图层展示参数

@model OptionsBindSample.Class
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<h3>Class No: @Model.ClassNo</h3>
<h3>ClassDesc: @Model.ClassDesc</h3>
<div>
@foreach (var item in Model.Students)
{
<span>Name:@item.Name</span>
<span>Name:@item.Age</span>
}
</div>
</body>
</html>

页面直接通过依赖注入读取配置信息

@using Microsoft.Extensions.Options;
@*@model OptionsBindSample.Class*@ @inject IOptions< OptionsBindSample.Class> MyClass @{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<h3>Class No: @MyClass.Value.ClassNo</h3>
<h3>ClassDesc: @MyClass.Value.ClassDesc</h3>
<div>
@foreach (var item in MyClass.Value.Students)
{
<span>Name:@item.Name</span>
<span>Name:@item.Age</span>
}
</div>
</body>
</html>

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

6.json文件命名为 appsettings.json

{
"ClassNo": "",
"ClassDesc": "ASP.NET Core 101",
"Students": [
{
"name": "name1",
"age": ""
},
{
"name": "name2",
"age": ""
},
{
"name": "name13",
"age": ""
}
]
}

7. 配置的热更新(解决了不需要重启网站及时读取配置信息的时候可以使用)@inject IOptionsSnapshot<Class> MyClass

@using Microsoft.Extensions.Options;
@using OptionBindSample
@*@model OptionsBindSample.Class*@ @inject IOptionsSnapshot<Class> MyClass @{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<h3>Class No: @MyClass.Value.ClassNo</h3>
<h3>ClassDesc: @MyClass.Value.ClassDesc</h3>
<div>
@foreach (var item in MyClass.Value.Students)
{
<span>Name:@item.Name</span>
<span>Name:@item.Age</span>
}
</div>
</body>
</html>

重写ConfigureAppConfiguration可以关闭JSON热更新

    public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
} public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(option =>
{
option.AddJsonFile("appsettings.json", false, false)
})
.UseStartup<Startup>();
}

在.net core Mvc中使用Options和IOptionsSnapshot的更多相关文章

  1. 【ASP.NET Core快速入门】(五)命令行配置、Json文件配置、Bind读取配置到C#实例、在Core Mvc中使用Options

    命令行配置 我们通过vs2017创建一个控制台项目CommandLineSample 可以看到现在项目以来的是dotnet core framework 我们需要吧asp.net core引用进来,我 ...

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

      命令行配置 我们通过vs2017创建一个控制台项目CommandLineSample 可以看到现在项目以来的是dotnet core framework 我们需要吧asp.net core引用进来 ...

  3. asp.net core-7.在Core Mvc中使用Options

    1,添加asp.net core mvc应用程序 2,添加Controllers控制器文件夹,Views视图文件夹 然后在Startup类中ConfigureServices方法中注册一下servic ...

  4. 任务13:在Core Mvc中使用Options

    13 新建Controllers文件夹,在里面添加HomeController控制器 新建Views文件夹,再新建Home文件夹.再新建Index.cshtml的视图页面 注释上节课的代码,否则我们的 ...

  5. 008.Adding a model to an ASP.NET Core MVC app --【在 asp.net core mvc 中添加一个model (模型)】

    Adding a model to an ASP.NET Core MVC app在 asp.net core mvc 中添加一个model (模型)2017-3-30 8 分钟阅读时长 本文内容1. ...

  6. 在ASP.NET Core MVC中子类Controller拦截器要先于父类Controller拦截器执行

    我们知道在ASP.NET Core MVC中Controller上的Filter拦截器是有执行顺序的,那么如果我们在有继承关系的两个Controller类上,声明同一种类型的Filter拦截器,那么是 ...

  7. NET Core MVC中创建PDF

    使用Rotativa在ASP.NET Core MVC中创建PDF 在本文中,我们将学习如何使用Rotativa.AspNetCore工具从ASP.NET Core中的视图创建PDF.如果您使用ASP ...

  8. ASP.NET Core MVC 中的 [Controller] 和 [NonController]

    前言 我们知道,在 MVC 应用程序中,有一部分约定的内容.其中关于 Controller 的约定是这样的. 每个 Controller 类的名字以 Controller 结尾,并且放置在 Contr ...

  9. ASP.NET Core MVC 中设置全局异常处理方式

    在asp.net core mvc中,如果有未处理的异常发生后,会返回http500错误,对于最终用户来说,显然不是特别友好.那如何对于这些未处理的异常显示统一的错误提示页面呢? 在asp.net c ...

随机推荐

  1. 20155333 2016-2017-2 《Java程序设计》第五周学习总结

    20155333 2016-2017-2 <Java程序设计>第五周学习总结 教材学习内容总结 1.使用try.catch语法 与C语言中程序流程和错误处理混在一起不同,Java中把正常流 ...

  2. Part 1 - Getting Started(1-3)

    https://simpleisbetterthancomplex.com/series/2017/09/04/a-complete-beginners-guide-to-django-part-1. ...

  3. MySQL 的IFNULL()、ISNULL()和NULLIF()函数

    参考与http://blog.csdn.net/xingyu0806/article/details/52080962 IFNULL(expr1,expr2) 假如expr1不为NULL,则 IFNU ...

  4. vivado用法

    声明为”DEBUG”,即使没有连接到其他模块,也不会被优化掉.但并不是所有的信号都是在声明为“debug”属性之后就不会优化掉. (2)同一个bank中能设置一个电平. (3)

  5. JAVA“动态”为类添加属性

    部分参考:http://www.cnblogs.com/zy2009/p/6725843.html pom.xml中添加: <dependency> <groupId>comm ...

  6. day16(jdbc进阶,jdbc之dbUtils)

    1.jdbc进阶 jdbc事务管理 jdbc中的事务管理其实就是交给了连接对象去管理.先写一个简单的事务管理 public class Demo01 { private static Connecti ...

  7. (线段树模板)A Simple Problem with Integers --POJ--3468

    链接: http://poj.org/problem?id=3468 代码: #include<stdio.h> #include<algorithm> #include< ...

  8. 同一台服务器配置多个tomcat服务的方法

    要在同一台服务器上配置多个tomcat服务,需要解决以下几个问题 (1) 不同的tomcat启动和关闭监听不同的端口 (2) 不同的tomcat的启动文件startup.sh 中要指定各自的CATAL ...

  9. cocos2dx lua 图片去色shader

    function FreeCardTool:setNodeGray(node) local vertShaderByteArray = "\n".. "attribute ...

  10. tf中softmax_cross_entropy_with_logits与sparse_softmax_cross_entropy_with_logits

    其实这两个都是计算交叉熵,只是输入数据不同. #sparse 稀疏的.稀少的 word_labels = tf.constant([2,0]) predict_logits = tf.constant ...