ASP.NET Core中间件设置教程(7)
asp.net core-中间件
在这一章,我们将了解如何设置中间件。中间件技术在 asp.net core中控制我们的应用程序如何响应 http 请求。它还可以控制应用程序的异常错误,这是一个在如何进行身份验证和授权用户执行特定的操作的关键。
- 中间件是组装成应用的管道来处理请求和响应的软件组件。
- 每个组件可以选择是否要在管道中将请求传递到下一个组件,并可以在管道中执行某些操作之前和之后的任务。
- request委托用于构建请求管道。request委托用来处理每个http请求。
- 每件中间件在 asp.net core都是一个对象,并且每一块有非常具体、 专注和有限的作用。
- 最终,我们需要很多的中间件为应用程序提供适当的行为。
现在让我们假设我们想将每个对我们应用程序的请求都记录日志。
- 在这种情况下,我们安装到应用程序中的第一块中间件是一个日志组件。
- 这个日志程序可以看到一切传入的请求,然后该中间件只是记录一些信息,然后传递这个请求下一个块中间件。
- 中间件是以一系列的组件出现在这个处理管道中。
- 我们安装到应用程序的下一个中间件是一个授权组件。
- 一个组件可能是寻找特定cookie或访问http标头中的令牌。
- 如果授权组件发现一个令牌,它允许请求继续。
- 如果不是,授权组件本身可能会响应请求的http错误代码或将用户重定向到登录页面。
- 否则,授权组件将请求传递给下一个路由器的中间件。
- 一个路由器查看url,并确定下一步的行动。
- 路由器是在做一些回应,如果路由器没有找到任何回应,路由器本身可能会返回404 not found错误。
案例
现在让我们通过一个简单的例子来理解更多关于中间件的知识。我们通过使用我们的启动类的configure方法来配置中间件组件。
using microsoft.aspnet.builder; using microsoft.aspnet.hosting; using microsoft.aspnet.http; using microsoft.extensions.dependencyinjection; using microsoft.extensions.configuration; namespace firstappdemo { public class startup { public startup() { var builder = new configurationbuilder() .addjsonfile("appsettings.json"); configuration = builder.build(); } public iconfiguration configuration { get; set; } // 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 http://go.microsoft.com/fwlink/?linkid=398940 public void configureservices(iservicecollection services) { } // this method gets called by the runtime. // use this method to configure the http request pipeline. public void configure(iapplicationbuilder app) { app.useiisplatformhandler(); app.run(async (context) => { var msg = configuration["message"]; await context.response.writeasync(msg); }); } // entry point for the application. public static void main(string[] args) => webapplication.run<startup>(args); } }
configure()方法内,我们将调用iapplicationbuilder接口的扩展方法来添加中间件。
默认情况下在一个新的空项目有两块中间件-
iisplatformhandler
middleware registered with app.run
iisplatformhandler
iisplatformhandler允许我们使用windows身份验证。它将着眼于每个传入请求,看看是否有任何windows身份信息相关的请求,然后调用下一个块中间件。
middleware registered with app.run
在这种情况下一个中间件在app.run中注册的中间件。run方法允许我们传入另一种方法,我们可以使用它来处理每一个响应。run方法不是你经常会看到的,我们可以称它为一个中间件的终端。
你注册运行的中间件将永远不会有机会调用另一个中间件,它唯一能做的就是接收请求,便要产生某种反应。
你也访问到一个响应对象,你可以在响应对象中添加一些字符串。
如果你想在app.run之后注册另一个中间件,这段中间件将永远不会被调用,因为run方法是一个中间件的终端。它不会调用下一个块中间件。
如何添加一个中间件
让我们着手进行以下步骤来添加另一个中间件 −
步骤1−右键单击项目并选择manage nuget packages。
步骤2−搜索 microsoft.aspnet.diagnostics,此特定的软件包包含许多不同种的中间件,我们可以使用。
步骤3−如果该包没有安装在您的项目中,那选择安装这个包。
步骤4−现在让我们在configure()方法调用app.usewelcomepage中间件。
// this method gets called by the runtime. // use this method to configure the http request pipeline. public void configure(iapplicationbuilder app) { app.useiisplatformhandler(); app.usewelcomepage(); app.run(async (context) => { var msg = configuration["message"]; await context.response.writeasync(msg); });
步骤 5 − 运行您的应用程序,您将看到以下的欢迎屏幕。
这个欢迎屏幕可能不是那么有用。
步骤6−让我们试试别的东西,可能是更有用的,而不是使用欢迎页面,我们将使用runtimeinfopage。
// this method gets called by the runtime. // use this method to configure the http request pipeline. public void configure(iapplicationbuilder app) { app.useiisplatformhandler(); app.useruntimeinfopage(); app.run(async (context) => { var msg = configuration["message"]; await context.response.writeasync(msg); }); }
第 7 步 − 保存您的 startup.cs 页面并刷新您的浏览器,你会看到下面的页面。
这个 runtimeinfopage 是中间件,将只响应一个特定的 url 的请求。如果传入的请求与该 url 不匹配,这个中间件只是让请求传递到下一件中间件。该请求将通过 iisplatformhandler 中间件,然后转到 useruntimeinfopage 中间件。它不会创建响应,所以它会转到我们的应用程序。运行并显示该字符串。
步骤8−我们在url结尾添加“ runtimeinfo”。现在,您将看到一个页面,该页面是由中间件运行时信息页面。
你将看到一个返回页面,它给你展示了一些关于你的运行时环境,如操作系统、运行时版本,结构,类型和您正在使用的所有包的信息。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。