ASP.Net Core -- 中间件
中间件
这一期就系统的了解一下在ASP.Net Core中的中间件,在ASP.Net Core中需要在startup.cs文件中的Configure方法配置我们需要的中间件,新建的ASP.Net Core空模板项目中有一个默认的中间件,就是app.run(),只不过这个中间件不常用,而且也比较简单。一般使用app.use开头的中间件相对多一些。比如:
好多代码都封装在了里边这些方法里边,我们可以随便写一个,例如:app.UseWelcomePage();启动项目,就会出现欢迎页!我们还可以在欢迎页中间件里配置访问路径:
这样启动项目,依旧会输出welcomeString里的字符串,当输入/Welcome就会出现欢迎页!使用中间件一般都是app.use()这种形式,里边还可以传入一些参数,来对中间件配置。
我们除了使用app.run或者app.usexxxxxx()两种形式,还可以直接使用app.use()来配置中间件。这种写法更底层一些,因为里边都需要我们配置。
里边的参数类型是RequestDelegate,返回值类型也是RequestDelegate,而这个RequestDelegate就是可执行的代码。我们可以再看一下app.run();
可以看到,里边也是RequestDelegate类型,而app.run()官方已经给好了,里边有一个context;
它的类型是HttpContext,所以我们在配置app.use()也要加入一些参数来配置,如下:
next依旧是RequestDelegate类型,它代表的是在管道里下一个需要执行的中间件是什么,所以next里边依旧还是一个中间件,如果在app.use()里调用这个next,就说明允许里边这个中间件处理当前这个http请求。在上图代码中,如果我们输入/first,就会输出first!!!,如果直接启动,会输出welcomeString里的欢迎信息,如果输入/welcome就会输出欢迎页。
如果想看得清楚一点,我们可以把Logger注册进来,看看日志记录就可以了。如下:
打开命令行,直接输入dotnet run,然后打开浏览器输入路径,就可以在窗口里看到打印的日志文字了!
· 处理异常的中间件:UseDeveloperExceptionPage();
如果不使用这个中间件,那么当程序出现问题时候,就直接返回500状态,如果使用就可以返回给我们错误信息,这是在开发环境下使用的中间件,所以这个中间件的位置比较靠前,如果靠后的话,前面的程序出现问题依旧捕捉不到异常信息。
报错信息:
这就是开发者异常页面!当然,这个中间件是给开发者来看的,如果是客户使用就不应该出现这样的页面,因为这样会暴露一些详细的信息!
环境
我们可以使用IHostingEnvironment来测试使用的是什么环境,刚刚上边有异常时,为什么会使用UseDeveloperExceptionPage()这个中间件呢?说明当我们启动IIS时候,使用的就是Development环境,可以在launchSettings.json文件查看:
可以看到,里边默认的有IIS启动,还有一个dotnet命令行启动,但是ASPNETCORE_ENVIRONMENT的值都一样,可以把值修改测试一下,把命令行里的ASPNETCORE_ENVIRONMENT值改一下,然后执行dotnet run就可以看到。里边Hosting environment的值也变了。然后就可以在浏览器输入"http://localhost:5000"浏览项目!
那么,不在开发环境呢?如下:
还可以配置访问静态文件的中间件
在ASP.Net Core里要想访问静态文件,需要配置读取静态文件的中间件,这里新建一个wwwroot文件夹:
在里边新建一个HTML页面,名为index.html,这个时候如何直接访问/Index.html是访问不到的,因为目前只能返回app.run()里的welcomeString字符串。这个时候可以写入app.UseStaticFiles();这个中间件,就可以访问了。还可以在app.UseStaticFiles()的前面加入app.UseDefaultFiles();也就是启动默认的静态文件。里边可以自己定义,默认的就是index.html页面,还可以使用app.UseFileServer();这个包含前两个,所以使用这一个也可以,里边也可以配置一些其它内容。启动项目,会直接访问index.html,访问其它路径,输出welcomeString字符串,访问index.html路径,返回index.html页面。