CORE 中间件、wwwroot

ASP.NET Core中间件组件是被组装到应用程序管道 中以处理HTTP请求和响应 的软件组件(从技术上来说,组件只是C#类)。

ASP.NET Core应用程序中的每个中间件组件执行以下任务。

选择是否将 HTTP 请求传递给管道中的下一个组件。这可以通过在中间件中调用下一个 next() 方法实现。

可以在管道中的下一个组件之前和之后执行工作。

在ASP.NET Core中,已经有很多内置的中间件组件可供使用,您可以直接使用它们。 如果需要,还可以在ASP.NET Core应用程序中创建自己的中间件组件。

您需要牢记的最重要的一点是,在ASP.NET Core中,给定的中间件组件应仅具有特定目的,即单一职责

中间件执行顺序

ASP.NET Core中间件组件的执行顺序与添加到管道中的顺序相同。 因此,在将中间件组件添加到请求处理管道时

csharp 复制代码
namespace WebApplication2
{
    public class Program
    {
        public static void Main(string[] args)
        {
            /*
           * WebApplication 表示整个Web应用程序 ,调用CreateBuilder()方法创建一个
             WebApplicationBuilder 对象。 
           * */
            var builder = WebApplication.CreateBuilder(args);

            // Add services to the container.
            /*
             WebApplicationBuilder 对象添加 RazorPages 服务 , 
             也可以添加其他服务,比如依赖注入、   登录等。
             */
            builder.Services.AddRazorPages();
            //构造一个 WebApplication 实例。
            var app = builder.Build();

            // Configure the HTTP request pipeline.
            if (!app.Environment.IsDevelopment())
            {
                //异常处理中间
                app.UseExceptionHandler("/Error");
            }
            //启用静态文件中间件,加上这行代码后, 我们在浏览器中才能访问 wwwroot 目录下的文件,否则会报错。
            app.UseStaticFiles();
            //启用路由中间件,启用后在浏览器中输入网址 Web应用才能正确解析
            app.UseRouting();
            //启用权限验证中间件,当我们的网站是基于身份认证的话需要用到,
            //一般购物网站都需要启用,如果只是纯展示性的比如企业官网等可以去掉。
            app.UseAuthorization();
            //启用Razor Pages中间件,如果是MVC应用,则使用 app.UseMvc(); 中间件。
            app.MapRazorPages();
            //启动应用,当我们开始执行WebApp , 浏览器就会帮我们打开网站 Index 页面了,
            app.UseEndpoints(endpoints=>
            {
                endpoints.MapGet("/",async context => {
                    await context.Response.WriteAsync("======");
                });
            });
            app.Run();
        }
    }
}
定义默认页面 默认查找的顺序
  1. default.htm
  2. default.html
  3. index.htm
  4. index.html

//定义默认页面

app.UseDefaultFiles()

// 可以访问静态文件

app.UseStaticFiles()

》》》必须在启用静态文件中间件之前,先启用默认文件中间件

》》》=================

DefaultFilesOptions options = new DefaultFilesOPtions();

options.DefaultFileNames.clear();// 清空默认的

options.DefaultFileNames.Add("Default_index.html");

app.UseDefaultFiles(options);

// 可以访问静态文件

app.UseStaticFiles()

**注意:**您需要在UseStaticFiles()中间件之前添加UseDefaultFiles()中间件,以便提供默认文件。 您需要记住的一点是UseDefaultFiles()中间件只是URL重写器,它永远不会提供静态文件。 该中间件的工作是简单地将传入URL重写为默认文件,然后由静态文件中间件提供服务。

》》》 UseFileServer 包含了 UseStaticFiles、UseDefaultFiles 功能

FileServerOptions options = new FileServerOptions();

options.DefaultFilesOptions.DefaultFileNames.Clear();

options.DefaultFilesOptions.DefaultFileNames.Add("Default_index.html");

app.UseFileServer(options);
UseFileServer它将静态文件中间件、默认文件中间件的功能结合起来啦。 注意UseFileServer 默认不启用目标浏览,但是支持修改此行为

添加 自己 MIME 类型

经典Asp.net web 应用程序,添加缺少的 MIME类型是在IIS内执行的配置任务,但是,在Asp.Net Core 应用中,IIS(以及其它平台上的Web服务器)只是作为反向代理,将传入的请求简单的转发给 Asp.net core 内置的Web服务器(kestrel),请求将从这里开始穿过请求管道。不过,必须通过代码配置这个管道。

csharp 复制代码
            StaticFileOptions options =new StaticFileOptions();
            var provider = new FileExtensionContentTypeProvider();
            // 添加自定义的MIME类型
            provider.Mappings[".myextension"] = "application/my-custom-type";
            provider.Mappings[".script"] = "text/javascript";
            provider.Mappings.Remove(".png");
            options.ContentTypeProvider = provider;
            app.UseStaticFiles(options);

Use、Run




UseEndpoints 终点中间件

wwwroot
相关推荐
佳腾_7 小时前
【消息队列kafka_中间件】一、快速入门分布式消息队列
分布式·云原生·中间件·kafka
ErizJ13 小时前
Go 微服务框架 | 中间件
微服务·中间件·golang
唐人街都是苦瓜脸2 天前
Kafka和RocketMQ相比有什么区别?那个更好用?
分布式·中间件·kafka·rocketmq
还是鼠鼠3 天前
Node.js局部生效的中间件
javascript·vscode·中间件·node.js·json·express
爱的叹息4 天前
数据库分库分表中间件及对比
数据库·中间件
和尚用0飘柔04 天前
【中间件】使用ElasticSearch提供的RestClientAPI操作ES
大数据·elasticsearch·中间件
还是鼠鼠4 天前
Node.js自定义中间件
javascript·vscode·中间件·node.js·json·express
还是鼠鼠5 天前
Node.js中间件的5个注意事项
javascript·vscode·中间件·node.js·json·express
ChinaRainbowSea7 天前
1. 初始 RabbitMQ 消息队列
java·中间件·rabbitmq·java-rabbitmq
还是鼠鼠7 天前
Node.js全局生效的中间件
javascript·vscode·中间件·node.js·json·express