ASP.NET Core

ASP.NET Core 2.2 基础知识(五) 环境

跟風遠走 提交于 2020-04-22 08:56:22
一.环境变量 系统启动时,会读取环境变量 ASPNETCORE_ENVIRONMENT , 并将该变量的值存储在 IHostingEnvironment.EnvironmentName 字段中.如: 新建一个 WebAPI 项目,修改 Configure 方法: public void Configure(IApplicationBuilder app, IHostingEnvironment env) { ...... { app.Run( async context => { context.Response.ContentType = "text/plain;charset=utf-8";//没有这句话,中文会出现乱码. await context.Response.WriteAsync($"当前环境 : {env.EnvironmentName}" ); }); } ...... } ASPNETCORE_ENVIRONMENT 可以设置为任意值,但是 ASP.NET Core 框架只支持 3 个值: Development Staging Production 如果没有设置该变量的值,则默认 Production 那么问题来了,在哪里设置呢? 方法一 : launchSettings.json 打开上例创建的 WebAPI 项目的 launchSettings.json

asp.net core 系列 9 三种运行环境和IIS发布

一笑奈何 提交于 2020-04-22 08:43:41
一.在asp.net core中使用多个环境   ASP.NET Core 配置是基于运行时环境, 使用环境变量。ASP.NET Core 在应用启动时读取环境变量ASPNETCORE_ENVIRONMENT,并将该值存储在 IHostingEnvironment.EnvironmentName 中。ASPNETCORE_ENVIRONMENT 可设置为任意值,但框架支持三个值:Development、Staging 和 Production。 如果发布项目未设置 ASPNETCORE_ENVIRONMENT,则默认为 Production (本机vs中项目Properties\launchSettings.json中environmentVariables默认设置的是Development,如果禁用environmentVariables,那默认则为Production)。   下面是Startup. Configure中的默认实现,本机默认配置的是Development环境。 // 如果是Development环境 if (env.IsDevelopment()) { // 当捕获同步和异步系统。管道中的异常实例,并生成HTML错误响应。 app.UseDeveloperExceptionPage(); } else { // 如果不是Development环境

eShopOnContainers 知多少[4]:Catalog microservice

我的未来我决定 提交于 2020-04-22 07:21:48
引言 Catalog microservice(目录微服务)维护着所有产品信息,包括库存、价格。所以该微服务的核心业务为: 产品信息的维护 库存的更新 价格的维护 架构模式 如上图所示,本微服务采用简单的数据驱动的CRUD微服务架构,来执行产品信息的创建、读取、更新和删除(CRUD)操作。 这种类型的服务在单个 ASP.NET Core Web API 项目中即可实现所有功能,该项目包括数据模型类、业务逻辑类及其数据访问类。其项目结构如下: 核心技术选型: ASP.NET Core Web API Entity Framework Core SQL Server Swashbuckle(可选) Autofac Eventbus Polly 实体建模 该微服务的核心领域实体是商品,其类图如下: 对于实体这一块,有两个小知识点需要说明一下: 进行数据库字段映射时,主键都使用了 ForSqlServerUseSequenceHiLo 指定使用 HI-LO 高低位序列进行主键生成。 使用NoTracking提升查询速度 在 CatalogController 的构造方法中,明确指定以下代码来进行查询优化,这一点也是我们值得学习的地方。 ((DbContext)context).ChangeTracker.QueryTrackingBehavior =

Asp.Net Core 2.0 项目实战(2)NCMVC一个基于Net Core2.0搭建的角色权限管理开发框架

蓝咒 提交于 2020-04-22 07:19:18
Asp.Net Core 2.0 项目实战(1) NCMVC开源下载了 Asp.Net Core 2.0 项目实战(2)NCMVC一个基于Net Core2.0搭建的角色权限管理开发框架 Asp.Net Core 2.0 项目实战(3)NCMVC角色权限管理前端UI预览及下载 Asp.Net Core 2.0 项目实战(4)ADO.NET操作数据库封装、 EF Core操作及实例 Asp.Net Core 2.0 项目实战(5)Memcached踩坑,基于EnyimMemcachedCore整理MemcachedHelper帮助类。 Asp.Net Core 2.0 项目实战(6)Redis配置、封装帮助类RedisHelper及使用实例 Asp.Net Core 2.0 项目实战(7)MD5加密、AES&DES对称加解密 Asp.Net Core 2.0 项目实战(8)Core下缓存操作、序列化操作、JSON操作等Helper集合类 Asp.Net Core 2.0 项目实战(9) 日志记录,基于Nlog或Microsoft.Extensions.Logging的实现及调用实例 Asp.Net Core 2.0 项目实战(10) 基于cookie登录授权认证并实现前台会员、后台管理员同时登录 Asp.Net Core 2.0 项目实战(11)

c#、ASP.NET core 基础模块之一:linq(原创)

一曲冷凌霜 提交于 2020-04-22 05:37:07
最近做数据查询,发现linq 真的比我 印象中 要强大的多,实用的多,所以 我决定 要与linq 来一场 深入交流, 因为linq的基础用法 可以百度一大摞,我就记录点不一样的,结合我做项目使用的。 什么是linq? l inq(Language Integrated Query, 语言集成查询) 优点 :1)linq提供了不同数据源的抽象层,所以可以使用相同的语法访问不同的数据源 2)linq在一定程度上降低了访问数据的复杂度(对于这点深有感触) 3)linq在编译的时候就进行检查,而不是在运行时。这样 语法错误可以及时修正 4)linq 定义的查询表达式 不是立即执行的,是在迭代中执行的(当然有扩展方法可以让其立即执行)。 这样 我们就可以把复杂的查询语句分开,而不用担心查询的效率。 缺点 :1)linq 是语法糖,最终还是会转化为sql 语句 ,这点会影响一点点性能,一般情况下 可忽略 2)linq对 几百行的sql 无能为力,对于上百万的 数据 就歇菜了 3)linq使用的多了,容易让程序员“忘本”,不在关心SQL语句怎么写的。 linq 的 功能(记录部分): 1、筛选、索引筛选 、类型筛选 // 简单的筛选就是where,这里就不做记录 // 这里举例 索引筛选 // 说明:在Where()方法的重载中,可以传递第二个参数-索引。索引是筛选器返回的每个结果的计数器。 /

eShopOnContainers 知多少[3]:Identity microservice

二次信任 提交于 2020-04-22 05:19:41
首先感谢晓晨Master和EdisonChou的审稿!也感谢正在阅读的您! 引言 通常,服务所公开的资源和 API 必须仅限受信任的特定用户和客户端访问。那进行 API 级别信任决策的第一步就是身份认证——确定用户身份是否可靠。 在微服务场景中,身份认证通常统一处理。一般有两种实现形式: 基于API 网关中心化认证 :要求客户端必须都通过网关访问微服务。(这就要求提供一种安全机制来认证请求是来自于网关。) 基于安全令牌服务(STS)认证 :所有的客户端先从STS获取令牌,然后请求时携带令牌完成认证。 而本节所讲的Identity microservice就是使用第二种身份认证方式。 服务简介 Identity microservice 主要用于统一的身份认证和授权,为其他服务提供支撑。 提到认证,大家最熟悉不过的当属Cookie认证了,它也是目前使用最多的认证方式。但Cookie认证也有其局限性:不支持跨域、移动端不友好等。而从当前的架构来看,需要支持移动端、Web端、微服务间的交叉认证授权,所以传统的基于Cookie的本地认证方案就行不通了。我们就需要使用远程认证的方式来提供统一的认证授权机制。 而远程认证方式当属:OAuth2.0和OpenID Connect了。借助OAuth2.0和OpenID Connect即可实现类似下图的认证体系: 而如何实现呢,借助: ASP.NET

(7)ASP.NET Core 中的错误处理

倖福魔咒の 提交于 2020-04-22 05:12:00
1.前言 ASP.NET Core处理错误环境区分为两种:开发环境和非开发环境。 ● 开发环境 :开发人员异常页。 ● 非开发环境 :异常处理程序页、状态代码页。 在Startup.Configure方法里面我们会看到如下代码: public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { // 开发环境 } else { // 非开发环境 } } env.IsDevelopment()是判断应用程序运行是在开发环境还是非开发环境,具体配置在Properties/launchSettings.json,找到ASPNETCORE_ENVIRONMENT属性,默认值是开发环境(Development),具体环境配置知识点后面我们再来学习下。 2.开发人员异常页 向Startup.Configure方法添加代码,以当应用在开发环境中运行时启用此页: if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } 开发人员异常页仅当应用程序在开发环境中运行时才会启用,而且调用UseDeveloperExceptionPage要配置于任何要捕获其异常的中间件前面。

ASP.NET Core 中间件自定义全局异常处理

柔情痞子 提交于 2020-04-22 05:09:56
目录 背景 ASP.NET Core过滤器(Filter) ASP.NET Core 中间件(Middleware) 自定义全局异常处理 .Net Core中使用ExceptionFilter .Net Core中使用中间件 总结 参考 背景   作为开发者,你兴高采烈地完成了新系统的功能开发。并且顺利经过验收,系统如期上线,皆大欢喜。   但是,有些bug就是在生产环境如期而至了。半夜梦酣之时,你被运维童鞋的电话惊醒了,系统不能正常运行了。接下来,他打包了一堆日志文件给你...   笔者有幸做过几年运维自动化系统,深知产品的每一次大跌代上线都是一场很多IT人的噩梦。更甚者,开发和运维人员有时候因为定位一个线上问题,花了一个通宵或者甚至版本回退。    干了多年开发越来越觉得,异常处理和定位的能力反映出开发者硬核能力 。如果开发人员能够在对系统中异常进行捕获,然后记录日志,并对日志进行划分等级,然后通过邮件或者短信等提醒,是不是能够做到提前预判呢。    在 asp.net core中全局异常处理,这里介绍两种不同的处理方式:过滤器捕获和中间件过滤。 过滤器   通过使用 ASP.NET Core 中的筛选器,可在请求处理管道中的特定阶段之前或之后运行代码。   内置过滤器处理任务,例如: 授权(防止用户访问未获授权的资源)。 响应缓存(对请求管道进行短路出路,以便返回缓存的响应)

IdentityServer4 QuckStart 授权与自定义Claims

血红的双手。 提交于 2020-04-22 05:00:54
最近在折腾IdentityServer4,为了简单,直接使用了官方给的QuickStart示例项目作为基础进行搭建。有一说一,为了保护一个API,感觉花费的时间比写一个API还要多。 本文基于ASP.NET CORE 3.1, IdentityServer4 3.1.3。代码皆为关键代码,贴全了太多了。 好不容易跑起来了,最终的任务要落实到授权的工作上来。在API中使用 Authorize 用来限制用户的访问。 [Route("api/[controller]")] [Authorize(Roles = "Administrator")] [ApiController] public class UserInfoController : ControllerBase { /// <summary> /// 无参GET请求 /// </summary> /// <returns></returns> [HttpGet()] [ProducesResponseType(typeof(ReturnData<IEnumerable<UserInfo>>), Status200OK)] public async Task<ActionResult> Get() { var info = new Info<UserInfo>(); return Ok(new ReturnData

c#、ASP.NET core 基础模块之一:linq(原创)

人盡茶涼 提交于 2020-04-22 04:36:38
最近做数据查询,发现linq 真的比我 印象中 要强大的多,实用的多,所以 我决定 要与linq 来一场 深入交流, 因为linq的基础用法 可以百度一大摞,我就记录点不一样的,结合我做项目使用的。 什么是linq? l inq(Language Integrated Query, 语言集成查询) 优点 :1)linq提供了不同数据源的抽象层,所以可以使用相同的语法访问不同的数据源 2)linq在一定程度上降低了访问数据的复杂度(对于这点深有感触) 3)linq在编译的时候就进行检查,而不是在运行时。这样 语法错误可以及时修正 4)linq 定义的查询表达式 不是立即执行的,是在迭代中执行的(当然有扩展方法可以让其立即执行)。 这样 我们就可以把复杂的查询语句分开,而不用担心查询的效率。 缺点 :1)linq 是语法糖,最终还是会转化为sql 语句 ,这点会影响一点点性能,一般情况下 可忽略 2)linq对 几百行的sql 无能为力,对于上百万的 数据 就歇菜了 3)linq使用的多了,容易让程序员“忘本”,不在关心SQL语句怎么写的。 linq 的 功能(记录部分): 1、筛选、索引筛选 、类型筛选 // 简单的筛选就是where,这里就不做记录 // 这里举例 索引筛选 // 说明:在Where()方法的重载中,可以传递第二个参数-索引。索引是筛选器返回的每个结果的计数器。 /