Asp.Net Core2.0+Vs2017+MVC 学习 二 中间件

继续用上次修改后的Configure方法为例

public void Configure(IApplicationBuilder app, IHostingEnvironment env,
            IWelcomeSeriver welcomeSeriver)//还可以自定义接口,,依赖注入,注意自定义的接口必须注册,不然找不到
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.Run(async (context) =>
            {
                string welcome = welcomeSeriver.GetWelcomeMessage();//这里获取配置文件的优先级应该是,命令行>系统变量>开发环境配置文件>配置文件
                await context.Response.WriteAsync(welcome);
            });
        }

在实际项目中,很少使用app.Run方法,一般这个方法里只配置简单的中间件。

----------------------------------------------------------------------------------------------------------------------------

通常使用,app.UseXXXX的方法,而相应的方法也通常都把实现封装起来了,用起来也挺方便。

例如  app.UseWelcomePage(); 代码执行到它,就截断返回一个欢迎页,也可以设置欢迎页的路由。

app.UseWelcomePage(new WelcomePageOptions {
                Path = "/MyWelcome"
            });

访问 localhost:xxxx/MyWelcome时,返回一个欢迎页。

--------------------------------------------------------------------------------------------------------------------------------

也可以直接使用app.Use(),这里写个例子

public void Configure(IApplicationBuilder app, IHostingEnvironment env, IConfiguration configuration)
        {
            //if (env.IsDevelopment())
            //{
            //    app.UseDeveloperExceptionPage();
            //}
            //next是一个RequestDelegate对象,代表的是管道里的下一个中间件
            app.Use(next =>
            {
                return async httpContext =>
                {
                    string str = httpContext.Request.Path;
                    //如果路径中有login,就返回login pls!
                    if (str.ToLower().Contains("login"))
                    {
                        await httpContext.Response.WriteAsync("login pls!");
                    }
                    //如果没有,就执行下一个中间件
                    else
                    {
                        await next(httpContext);
                    }
                };
            });

            //如果路径是 /MyWelcome,就返回欢迎页,不是,下一个
            app.UseWelcomePage(new WelcomePageOptions {
                Path = "/MyWelcome"
            });

            //如果能执行到这,就从配置文件中读取DefaultWords节点输出出来
            app.Run(async (context) =>
            {
                string str = configuration["DefaultWords"];
                await context.Response.WriteAsync(str);
            });
        }

这里也可以看出,多个中间件是按顺序执行的(如果没被中断的话)

 

猜你喜欢

转载自www.cnblogs.com/luyShare/p/11599384.html
今日推荐