UseStaticFiles中的RequestPath和波浪号字符

时间:2019-02-14 11:24:04

标签: razor asp.net-core asp.net-core-mvc

使用后

app.UseStaticFiles(requestPath: "/static")

, 通过

生成的路径
<link rel="stylesheet" href="~/css/global.css"/>

<link rel="stylesheet" href="/css/global.css"/>

而不是预期的

<link rel="stylesheet" href="/static/css/global.css"/>

如何将波浪号字符的路径生成逻辑更新为使用requestPath

1 个答案:

答案 0 :(得分:0)

波浪号用于引用应用程序根目录。例如,如果您的应用程序被配置为具有不同的路径基础(使用UsePathBase()),那么当您使用使用波浪号字符的动态路径时,该路径基础将考虑传入的请求。

但是,字符不是到达静态文件根目录的快捷方式。使用波浪号使用应用程序相对路径来到达非静态路径是完全有效的,例如,如果您有其他一些可以回答请求的中间件。

从概念上讲,由于多种原因,波浪号也无法自动选择静态文件的位置:

  • 执行app.UseStaticFiles(requestPath: …)时,该路径仅本地存储在静态文件中间件中。关于该根的信息无法到达外部。
  • 从技术上讲,通过使用不同的配置多次调用UseStaticFiles(),您可以完全使用多个静态文件中间件。这样,将无法正确知道您所指的是静态文件根。

通常,我建议您将静态文件中间件保留为默认值。这样,像favicon.ico这样的静态文件就可以从根目录中受益,它们仍然可以正确提供。如果希望文件位于子路径中,请考虑只在wwwroot内创建一个子文件夹。这样,在Razor视图中使用波浪号时,您还将获得适当的IntelliSense。