Startup
时间:2020-09-20
本文章向大家介绍Startup,主要包括Startup使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
使用泛型主机 (IHostBuilder) 时,只能将以下服务类型注入 Startup
构造函数:
不使用 Startup
类,请在主机生成器上调用 ConfigureServices
和 Configure
便捷方法
public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureAppConfiguration((hostingContext, config) => { }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.ConfigureServices(services => { services.AddControllersWithViews(); }) .Configure(app => { var loggerFactory = app.ApplicationServices .GetRequiredService<ILoggerFactory>(); var logger = loggerFactory.CreateLogger<Program>(); var env = app.ApplicationServices.GetRequiredService<IWebHostEnvironment>(); var config = app.ApplicationServices.GetRequiredService<IConfiguration>(); logger.LogInformation("Logged in Configure"); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } var configValue = config["MyConfigKey"]; }); }); }); }
使用 Startup 筛选器扩展 Startup
使用 IStartupFilter:用于将默认值添加到管道的开头,无需显式调用 Use{Middleware}
public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureAppConfiguration((hostingContext, config) => { }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }) .ConfigureServices(services => { services.AddTransient<IStartupFilter, RequestSetOptionsStartupFilter>(); }); } public class RequestSetOptionsStartupFilter : IStartupFilter { public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next) { return builder => { builder.UseMiddleware<RequestSetOptionsMiddleware>(); next(builder); }; } } public class RequestSetOptionsMiddleware { private readonly RequestDelegate _next; public RequestSetOptionsMiddleware( RequestDelegate next ) { _next = next; } // Test with https://localhost:5001/Privacy/?option=Hello public async Task Invoke(HttpContext httpContext) { var option = httpContext.Request.Query["option"]; if (!string.IsNullOrWhiteSpace(option)) { httpContext.Items["option"] = WebUtility.HtmlEncode(option); } await _next(httpContext); } }
原文地址:https://www.cnblogs.com/yetsen/p/13701155.html
- OC学习1——基本数据类型
- QQ定位女友是否回家系列二之定位系统的打造
- htcap:一款实用的递归型Web漏洞扫描工具
- 使用Go和Let's Encrypt证书部署HTTPS
- md5算法
- 《JavaScript高级程序设计》学习笔记(3)——变量、作用域和内存问题
- King Phisher:一款专业的钓鱼活动工具包
- 是不是Bash编程老司机,看完这10条细节就知道了
- 以针对Yahoo! 的安全测试为例讲解如何高效的进行子域名收集与筛选
- 线程池
- hbase 部署
- Hadoop源码系列(一)FairScheduler申请和分配container的过程
- MOTS攻击之TCP攻击
- iOS学习——获取当前最顶层的ViewController
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 使用 vagrant 从搭建 gitlab server 开始体验整个 gitlab CI/CD 过程
- 纲手推荐程序笔记1-p5.js创意游戏编程
- 由浅入深彻底了解 Python 闭包和装饰器
- leetcode1078 Occurrences After Bigram
- 负二进制加法实现
- 如何在O(1)时间复杂度下实现LRU
- 字符串拼接的N种方式
- MySQL 解决查询NULL的问题
- 矩阵旋转的解决
- Python partial最通俗的理解
- Django Form的使用
- Python每日一题:装饰器(完整篇)
- Vue视图渲染原理解析,从构建VNode到生成真实节点树
- Vue你不得不知道的异步更新机制和nextTick原理
- 手摸手带你理解Vue的Watch原理