我了解中间件may matter的注册顺序。但是,未必一定如此。
我注意到 UseDefaultFiles()必须在 UseStaticFiles()之前(可以由UseFileServer()规避)。
我不明白为什么。它们如何碰撞?!
我已经搜索了该问题,但是对为什么的订单在这种特殊情况下意义重大,却没有什么动机。只是它很重要...
答案 0 :(得分:4)
摘自Static files in ASP.NET Core上的文档(在“服务默认文档”下,有一个重要注释)。
必须在UseDefaultFiles
之前调用
UseStaticFiles
才能提供默认文件。UseDefaultFiles
是实际上不提供文件服务的URL重写器。通过UseStaticFiles
启用静态文件中间件来提供文件。
基于此,在提供实际文件(UseDefaultFiles
)之前首先设置URL重写器(UseStaticFiles
)很重要。
如果不这样做,UseStaticFiles
中间件将首先启动,但是对应用程序根目录的请求不会告诉中间件要服务哪个“文件”。当您确保首先进行重写时,对应用程序根目录的请求将被重写为对(其中一个)默认文件的请求。
答案 1 :(得分:2)
来自docs:
必须在UseDefaultFiles
之前调用
UseStaticFiles
才能提供默认文件。UseDefaultFiles
是实际上不提供文件服务的URL重写器。通过UseStaticFiles
启用静态文件中间件来提供文件。
中间件的顺序确实很重要,这就是为什么UseStaticFiles
必须位于UseMvc
之前的原因,因为MVC引擎将处理所有请求。在这种情况下,UseDefaultFiles
只是重写URL并将其传递给UseStaticFiles
中间件以进行服务。
答案 2 :(得分:2)
UseDefaultFiles()应该始终在 UseStaticFiles()之前。
这是因为UseDefaultFiles重写了URL。使用静态文件仅提供URL。
如果送达文档的时间早于URL重写,则可能无法送达默认文档。