为什么UseStaticFiles和UseDefaultFiles之间的顺序很重要?

Kon*_*ten 3 c# .net-core asp.net-core-2.2

我知道中间件的注册顺序可能很重要。但是,未必一定如此。

我注意到UseDefaultFiles()必须位于UseStaticFiles()之前(可以由UseFileServer()完全规避)。

我不明白是为什么。它们如何碰撞?

我已经用Google搜索这个问题,但是对于在这种特殊情况下订单为何如此重要一无所知。只是它很重要...

Dav*_*idG 7

文档

UseDefaultFiles必须在UseStaticFiles提供默认文件之前调用。UseDefaultFiles是一个 URL 重写器,实际上并不为文件提供服务。通过启用静态文件中间件UseStaticFiles来提供文件。

中间件的顺序确实很重要,例如,这就是为什么UseStaticFiles必须在前面,UseMvc因为 MVC 引擎将处理所有请求。在这种情况下,UseDefaultFiles只需重写 URL 并将其传递给UseStaticFiles中间件即可提供服务。


ric*_*sch 5

摘自ASP.NET Core中静态文件的文档(在“服务默认文档”下,有一条重要说明)。

UseDefaultFiles必须先调用才能UseStaticFiles提供默认文件。UseDefaultFiles是实际上不提供文件的URL重写器。启用静态文件中间件通过UseStaticFiles来提供文件。

基于此,UseDefaultFiles在提供实际文件(UseStaticFiles)之前首先设置URL重写器()很重要。
如果您不这样做,则UseStaticFiles中间件将首先启动,但对应用程序根目录的请求不会告诉中间件要服务哪个“文件”。当您确保首先进行重写时,对应用程序根目录的请求将被重写为对默认文件之一的请求。