ASP.NET Core

16.ASP.NET Core应用程序中的开发者异常页面中间件

安稳与你 提交于 2020-04-21 10:06:09
Developer Exception Page Middleware in ASP.NET Core Application 在这篇文章中,我将向大家介绍,怎么在ASP.NET Core应用程序中,使用异常页面中间件,来处理我们程序中未处理的异常。在阅读这篇文章之前,可以看看我这个系列的之前写的文章。异常处理是所有应用程序中,特别关键的一个点,我们可以通过各种方式方法,来处理异常,但是在这篇文章我要向大家讲解,怎样使用异常页面中间件来处理异常。这篇文章中,我们主要讨论下面几个点: 什么是开发者异常页面中间件? 怎样在ASP.NET Core应用程序中,使用异常页面中间件? 怎样定制异常中间件? 我们在哪配置异常页面中间件? 理解异常页面中间件 默认情况下,ASP.NET Core应用程序,如果发生了异常,就是仅仅简单的返回一个状态码。我们通过一个例子,来了解一下。我们修改一下Configure方法,返回一个异常: 运行程序:就会看到这样的页面。 正如你上图所看到的,返回了一个500状态码,表示:服务器内部异常。但是作为一个开发者,当你开发应用程序,你应该要在页面上知道,异常的详细信息,然后你才能分析,并采取措施解决Bug. 怎样在ASP.NET Core应用程序中,使用DeveloperExceptionPage 中间件? 当程序发生异常的时候

13.在ASP.NET Core中配置中间件组件

别等时光非礼了梦想. 提交于 2020-04-21 09:27:43
原文: 13.在ASP.NET Core中配置中间件组件 这篇文章中,我们将一起学习在ASP.NET Core中配置中间件组件,以便处理请求处理管道。在阅读这篇文章之前,麻烦大家先去看看,我前面写的一篇文章: ASP.NET Core中间件组件 。在这篇文章中,我们将一起学习下面几个内容: 怎样在ASP.NET Core中配置中间件组件? 什么是ASP.NET Core中的请求委托? 什么是ASP.NET Core中的Use和Run方法? 什么是 UseDeveloperExceptionPage 中间件组件? 怎样使用扩展方法Run,来配置中间件组件? 什么是扩展方法? 怎样在ASP.NET Core中配置中间件组件 在前面的文章中,我们已经知道,我们需要在Startup类文件中的Startup类中的Configure方法内,来配置中间件组件。我们打开之前创建的空模板的ASP.NET Core项目,可以看到项目默认有一个Configure方法: 什么是ASP.NET Core中的请求委托? 在ASP.NET Core中,请求委托被用来构建请求管道,也就是请求委托用来处理每一个即将从客户端发来的请求。在ASP.NET Core中,你可以使用Run、Map、以及Use扩展方法来配置请求委托。你可以使用,匿名的内联方法,来指定一个请求委托(这叫做内联中间件)

15.ASP.NET Core 应用程序中的静态文件中间件

女生的网名这么多〃 提交于 2020-04-21 09:08:46
原文: 15.ASP.NET Core 应用程序中的静态文件中间件 在这篇文章中,我将向大家介绍,如何使用中间件组件来处理静态文件。这篇文章中,我们讨论下面几个问题: 在ASP.NET Core中,我们需要把静态文件存放在哪里? 在ASP.NET Core中 wwwroot文件夹是啥? 怎样在ASP.NET Core应用程序中,配置静态文件中间件? UseFileServer中间件的作用是什么? 最重要的特性之一就是;几乎所有的web应用程序都应该具备直接从文件系统存取静态文件的能力。ASP.NET Core能够直接从客户端获取应用程序的静态文件,比如:HTML、Images、CSS、以及JavaScript文件。但是最重要的一点,你需要记住的是: 默认情况下,在ASP.NET Core中并不能直接获取访问这些静态文件 。需要额外在做一些配置,ASP.NET Core才能够直接获取访问这些静态文件。 在ASP.NET Core中,我们需要把静态文件存放在哪里? 在ASP.NET Core中,默认存放静态文件的目录或者地方就是wwwroot文件夹,并且这个wwwroot文件夹需要放在项目的根目录下面。默认情况下,这是ASP.NET Core应用程序,能直接访问静态文件的目录。但是我们可以通过使用UseWebRoot方法来改变这一默认行为。在后面的文章中

ASP.NET Core系列(三):启动类Startup

杀马特。学长 韩版系。学妹 提交于 2020-04-21 06:53:30
前面讲了ASP.NET Core 的项目结构,查看完整的ASP.NET Core系列文章: https://www.cnblogs.com/zhangweizhong/category/1477144.html ASP.NET Core 里面一个比较重要的就是Startup.cs 类,包括加载配置, 通过依赖注入加载组件, 注册路由等都在此处进行。今天就来聊一聊Startup 类的作用和用法。 与 ASP.NET 对比,ASP.NET Core 最显著的变化之一就是配置应用程序的方式,Global.asax、FilterConfig.cs 和 RouteConfig.cs 统统消失了,取而代之的是 Program.cs 和 Startup.cs。Program.cs 作为 Web 应用程序的默认入口,会自动调用Startup.cs 中的 ConfigureServices 方法 和 Configure 方法。大致流程如下图所示: Startup 类 Startup 类是配置服务和应用的请求管道。 Startup 类的作用:   1. ConfigureServices方法用于定义(注册)应用程序所使用的服务。(如:ASP.NET Core MVC,Entity Framework Core,Identity 等);   2. Configure方法用于定义请求管道的中间件

.NET Core 中正确使用 HttpClient 的姿势

怎甘沉沦 提交于 2020-04-21 06:53:11
为了更方便在服务端调用 HTTP 请求,微软在 .NET Framework 4.x 的时候引入了 HttpClient。但 HttpClient 有很多严重问题,一直饱受诟病,比如 InfoQ 的这篇文章 t.cn/Evzy80y ,吐槽了 HttpClient 不能立即关闭连接、性能消耗严重等的问题。 .NET Core 2.1 开始引入的 HttpClientFactory 解决了 HttpClient 的所有痛点。有了 HttpClientFactory,我们不需要关心如何创建 HttpClient,又如何释放它。通过它可以创建具有特定业务的 HttpClient,而且可以很友好的和 DI 容器结合使用,更为灵活。下面以 ASP.NET Core 为例介绍 HttpClient 新的三种正确使用方式。 一、直接使用方式 不管是哪种方式,都要先注册服务,对于 ASP.NET Core 应用则是在 Startup.cs 文件的 ConfigureServices 添加如果代码: services.AddHttpClient(); 然后在 Controller 中通过构造注入的试获得 IHttpClientFactory ,然后通过它来创建 HttpClient 对象。示例代码: public class ValuesController : BaseController {

(1)ASP.NET Core 应用启动Startup类简介

こ雲淡風輕ζ 提交于 2020-04-21 06:52:45
1.前言 Core与早期版本的 ASP.NET 对比,配置应用程序的方式的 Global.asax、FilterConfig.cs和RouteConfig.cs 都被Program.cs 和 Startup.cs取代了。Program.cs作为Web应用程序的默认入口,在没有任何修改的情况下,会调用同目录下Startup.cs中的ConfigureServices 和 Configure方法。 2.Startup类 Startup类配置服务和应用的请求管道。Program.Main方法是应用程序的托管入口。在构建应用程序的主机(WebHost)时,系统为应用程序指定 Startup 类,而Main入口通过主机生成器(IWebHostBuilder)调用Build时,生成对应的应用程序的主机(WebHost),并启动运行(Run)。 public class Program { public static void Main( string [] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder( string [] args) => WebHost.CreateDefaultBuilder(args) .UseStartup

《ASP.NET Core应用开发入门教程》与《ASP.NET Core 应用开发项目实战》正式出版

对着背影说爱祢 提交于 2020-04-21 05:05:24
“全书之写印,实系初稿。有时公私琐务猬集,每写一句,三搁其笔;有时兴会淋漓,走笔疾书,絮絮不休;有时意趣萧索,执笔木坐,草草而止。每写一段,自助覆阅,辄摇其首,觉有大不妥者,即贴补重书,故剪刀浆糊乃不离左右。个中甘苦,只自知之。”董作宾先生的这段文字正好描述我写作此书的状态。 《ASP.NET Core应用开发入门教程》与《ASP.NET Core 应用开发项目实战》于2020年1月正式出版。 《ASP.NET Core应用开发入门教程》是作者潜心研究ASP.NET Core 技术的心血之作,书如其名,整本书的内容深入浅出地介绍了ASP.NET Core应用开发所需要的基础知识,并对其底层框架进行了剖析,力求将ASP.NET Core的整个运行机制完整而清晰地呈现在读者面前。主要包括.NET Core的基础知识及其安装、dotnet命令、Visual Studio开发工具的安装和使用、ASP.NET Core的原理及其组件介绍、Entity Framework Core框架、ASP.NET Core MVC框架和依赖注入等。 《ASP.NET Core 应用开发项目实战》主要是在《ASP.NET Core应用开发入门教程》的基础上,通过开发一个经过简化的物流管理信息系统(TPLMS),来实践ASP.NET Core MVC应用程序框架的开发技术

记录:如何使用ASP.NET Core和EnityFramework Core实现 数据库操作 和 数据库实体 的项目分离

一曲冷凌霜 提交于 2020-04-21 05:03:16
前情提要:   现有一个网站框架,包括主体项目WebApp一个,包含 IIdentityUser 接口的基架项目 A。用于处理用户身份验证的服务 AuthenticationService 位于命名空间B。用于保存数据的实体 User : IIdentityUser 位置项目C。项目之间的关系是B和C依赖项目A。 需求:   现在有一个新项目D,在这个项目里有一个DUser : IIdentityUser 。如何处理才能最优雅的在不添加引用和修改项目B的前提下,将用户保存至DUser。 实际例子:   在ASP.NET CORE中,有一个东西叫IdentityServer。里面就有这个东西,他写的是类似IdentityServerBuilder.AddService<TUser, TRole>()这种代码,如何实现? 解决方案:   1、新建一个泛类(这个类可以标记为internal,外部不需要了解,也不需要访问): public class UserContext<TUser> where TUser : class, IIdentityUser, new () { public YourContext dbContext; public UserContext(YourContext ctx) => dbContext = ctx; public DbSet<TUser>

IdentityServer4 QuckStart 授权与自定义Claims

≡放荡痞女 提交于 2020-04-21 02:13:36
最近在折腾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

XUnit 依赖注入

*爱你&永不变心* 提交于 2020-04-20 18:10:57
XUnit 依赖注入 Intro 现在的开发中越来越看重依赖注入的思想,微软的 Asp.Net Core 框架更是天然集成了依赖注入,那么在单元测试中如何使用依赖注入呢? 本文主要介绍如何通过 XUnit 来实现依赖注入, XUnit 主要借助 SharedContext 来共享一部分资源包括这些资源的创建以及释放。 Scoped 针对 Scoped 的对象可以借助 XUnit 中的 IClassFixture 来实现 定义自己的 Fixture,需要初始化的资源在构造方法里初始化,如果需要在测试结束的时候释放资源需要实现 IDisposable 接口 需要依赖注入的测试类实现接口 IClassFixture<Fixture> 在构造方法中注入实现的 Fixture 对象,并在构造方法中使用 Fixture 对象中暴露的公共成员 Singleton 针对 Singleton 的对象可以借助 XUnit 中的 ICollectionFixture 来实现 定义自己的 Fixture ,需要初始化的资源在构造方法里初始化,如果需要在测试结束的时候释放资源需要实现 IDisposable 接口 创建 CollectionDefinition,实现接口 ICollectionFixture<Fixture> ,并添加一个 [CollectionDefinition(