角落的白板报微软MVP带你....Net Core

《从零开始学ASP.NET CORE MVC》: 配置ASP.N

2019-04-15  本文已影响2人  角落的白板笔

本文出自《从零开始学ASP.NET CORE MVC》
推荐文章:ASP.NET Core中的中间件

配置ASP.NET Core请求(Request)处理管道

在本视频中,我们将讨论使用中间件组件为asp.net core 应用程序配置请求处理管道。

作为应用程序启动的一部分,我们要在Configure()方法中设置请求处理管道

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.Run(async (context) =>
        {
            await context.Response.WriteAsync("Hello World!");
        });
    }

}

目前我们的代码中有2个中间件在管道中 :UseDeveloperExceptionPage()方法Run()方法

UseDeveloperExceptionPage 中间件:顾名思义,如果存在异常并且环境是Development,此中间件会被调用,显示开发异常页面。 我们将在后面的视频中讨论这个DeveloperExceptionPage中间件环境变量的使用

第二个中间件是注册Run()方法到管道中,它只能处理将一个信息传入Response对象。 目前,它是一个响应每个请求的中间件,返回Hello world。
在这种情况下,无论您的请求路径是什么。 所有请求都会被这个中间件所处理,我们得到的返回值都是这个中间件调用Response对象,返回的string类型的字符串。
返回的值是纯文本而不是html。 我们可以通过检查页面源代码来确认这一点。
可以看到,我们在源代码中没有任何html标记。 只是纯文本。

即使您现在创建一个为52abp.html的文件,并且您在请求中包含该文件的路径,我们的应用程序也无法返回该静态文件。 这是因为,目前我们的请求处理管道没有可以提供静态文件的中间件,如html文件,图像,CSS和JavaScript文件
在后面的课程中,我们将添加所需的中间件以便能够提供静态文件。

研究下 Configure()方法中的代码。

app.Run(async (context) =>
{
    await context.Response.WriteAsync("Hello World!");
});

代码说明:

研究下面的代码

app.Run(async (context) =>
{
    await context.Response.WriteAsync("从第一个中间件中打印Hello World");
});

app.Run(async (context) =>
{
    await context.Response.WriteAsync("从第二个中间件中打印Hello World");
});

如果您希望中间件能够调用管道中的下一个中间件,则使用Use()方法注册中间件,如下所示。

app.Use(async (context, next) =>
{
    await context.Response.WriteAsync("从第一个中间件中打印Hello World");
    await next();
});

app.Run(async (context) =>
{
    await context.Response.WriteAsync("从第二个中间件中打印Hello World");
});

注意,Use()方法有2个参数。第一个参数是HttpContext上下文对象,第二个参数是Func类型,即它是代表管道中下一个中间件的通用委托。

我们再看看以下代码

public void Configure(IApplicationBuilder app, IHostingEnvironment env,
                ILogger<Startup> logger)
{
    app.Use(async (context, next) =>
    {
        logger.LogInformation("MW1:传入请求");
        await next();
        logger.LogInformation("MW1:传出响应");
    });

    app.Use(async (context, next) =>
    {
        logger.LogInformation("MW2: 传入请求");
        await next();
        logger.LogInformation("MW2: 传出响应");
    });

    app.Run(async (context) =>
    {
        await context.Response.WriteAsync("MW3: 处理请求并生成响应");
        logger.LogInformation("MW3: 处理请求并生成响应");
    });
}

现在将上面的输出与微软的官方文档中的下图集合起来,是不是就清晰明了啊。吐槽下,微软的文档有粗糙。

image.png

请求处理管道的中3个非常重要的知识点:

小结

Response 为抽象类

乱码问题

                context.Response.ContentType = "text/plain; charset=utf-8";

声明

如果您觉得我的文章质量还不错,欢迎打赏,也可以订阅我的视频哦
未得到授权不得擅自转载本文内容,52abp.com保留版权
文字版目录: https://www.52abp.com/Wiki/mvc/latest/1.Intro
【收费】腾讯课堂:https://ke.qq.com/course/392589?tuin=2522cdf3
【免费】youtube视频专区:http://t.cn/Ei0F2EB
【免费】B站: https://space.bilibili.com/2954671
免费的更新慢,收费的更新快,仅此而已。就这样。

关注微信公众号:角落的白板报

公众号:角落的白板报
上一篇下一篇

猜你喜欢

热点阅读