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

时间:2018-12-31 15:07:09

标签: c# .net-core asp.net-core-2.2

我了解中间件may matter的注册顺序。但是,未必一定如此。

我注意到 UseDefaultFiles()必须在 UseStaticFiles()之前(可以由UseFileServer()规避)。

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

我已经搜索了该问题,但是对为什么的订单在这种特殊情况下意义重大,却没有什么动机。只是它很重要...

3 个答案:

答案 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重写,则可能无法送达默认文档。

Refernece:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/static-files?view=aspnetcore-2.2#serve-a-default-document