在.net core Mvc中使用Options和IOptionsSnapshot
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的更多相关文章
- 【ASP.NET Core快速入门】(五)命令行配置、Json文件配置、Bind读取配置到C#实例、在Core Mvc中使用Options
命令行配置 我们通过vs2017创建一个控制台项目CommandLineSample 可以看到现在项目以来的是dotnet core framework 我们需要吧asp.net core引用进来,我 ...
- 菜鸟入门【ASP.NET Core】5:命令行配置、Json文件配置、Bind读取配置到C#实例、在Core Mvc中使用Options
命令行配置 我们通过vs2017创建一个控制台项目CommandLineSample 可以看到现在项目以来的是dotnet core framework 我们需要吧asp.net core引用进来 ...
- asp.net core-7.在Core Mvc中使用Options
1,添加asp.net core mvc应用程序 2,添加Controllers控制器文件夹,Views视图文件夹 然后在Startup类中ConfigureServices方法中注册一下servic ...
- 任务13:在Core Mvc中使用Options
13 新建Controllers文件夹,在里面添加HomeController控制器 新建Views文件夹,再新建Home文件夹.再新建Index.cshtml的视图页面 注释上节课的代码,否则我们的 ...
- 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. ...
- 在ASP.NET Core MVC中子类Controller拦截器要先于父类Controller拦截器执行
我们知道在ASP.NET Core MVC中Controller上的Filter拦截器是有执行顺序的,那么如果我们在有继承关系的两个Controller类上,声明同一种类型的Filter拦截器,那么是 ...
- NET Core MVC中创建PDF
使用Rotativa在ASP.NET Core MVC中创建PDF 在本文中,我们将学习如何使用Rotativa.AspNetCore工具从ASP.NET Core中的视图创建PDF.如果您使用ASP ...
- ASP.NET Core MVC 中的 [Controller] 和 [NonController]
前言 我们知道,在 MVC 应用程序中,有一部分约定的内容.其中关于 Controller 的约定是这样的. 每个 Controller 类的名字以 Controller 结尾,并且放置在 Contr ...
- ASP.NET Core MVC 中设置全局异常处理方式
在asp.net core mvc中,如果有未处理的异常发生后,会返回http500错误,对于最终用户来说,显然不是特别友好.那如何对于这些未处理的异常显示统一的错误提示页面呢? 在asp.net c ...
随机推荐
- httpclient之基本类
HttpHost类 主机类 主要属性有域名和端口. HttpRoute类 路由类 主要属性有targetHost(目标主要).proxyChain[]代理链 RouteTracker类 和H ...
- Oracle连接字符串大全
// 在 C# 代码中用以下数据库提供程序访问 Oracle 数据库 // Oracle Data Provider for .NET / ODP.NET 使用 TNS 写法 Data Source= ...
- 2018.09.01 poj3071Football(概率dp+二进制找规律)
传送门 概率dp简单题. 设f[i][j]表示前i轮j获胜的概率. 如果j,k能够刚好在第i轮相遇,找规律可以发现j,k满足: (j−1)>>(i−1)" role=" ...
- jar 包和 mysql 服务器部署
(1)创建好本地服务器: navicat新建链接: 链接名:自定义,这里命名为test 配置同jar包 (2)给予登陆权限,loclhost_3306,右击选择“命令行界面”,输入如下: create ...
- ansible-playbook api 2.0 直接运行
官方文档见 http://docs.ansible.com/ansible/dev_guide/developing_api.html 拿官方的例子修改如下 import json from col ...
- 20155336 2016-2017-2《JAVA程序设计》第六周学习总结
20155336 2016-2017-2<JAVA程序设计>第六周学习总结 教材学习内容总结 第十章 串流(Stream): 数据有来源及目的地,衔接两者的是串流对象.如果要将数据从来源取 ...
- 201709025工作日记--更新UI方法
1.handler+Thread 和 runOnUIThread 和 handler.post 方法 区别: 从实现原理上,两者别无二致,runOnUiThread也是借助Handler实现的. 对 ...
- (并查集 建立关系)食物链 -- POJ-- 1182
链接: http://poj.org/problem?id=1182 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82830#probl ...
- Robotframework 简介及工作原理
下面通过官网和网上资料来简单介绍下Robotframework及其工作原理. 官方说明: Robot Framework is a generic test automation framework ...
- RepositionBars的用法和参数的意义(引用别人的)
MFC窗口位置管理详细分析及实例 在一般用MFC编写的程序的窗口客户区中,可能有好几个子窗口(具有WM_CHILD风格的窗口).上边是工具栏,中间是视图窗口,下边是状态栏.三个窗 口在框架的客户区里和 ...