【问题标题】:RequestPath in UseStaticFiles and the tilde characterUseStaticFiles 中的 RequestPath 和波浪号字符
【发布时间】:2019-02-14 11:24:03
【问题描述】:

使用后

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

【问题讨论】:

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


    【解决方案1】:

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

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

    从概念上讲,波浪号也不可能自动获取静态文件所在的位置,原因有很多:

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

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

    【讨论】:

    • 在这种情况下,docs.microsoft.com/en-us/aspnet/core/fundamentals/… 可能包含不准确的信息,即“波浪号 ~/ 指向 webroot。”。
    • 从技术上讲,引用应该是 “在前面的代码中,波浪号 ~/ 指向 webroot” 这是正确的,因为前面的代码还显示了未经修改的 @987654327 @ 称呼。但是,是的,这可以改进。您可以在页面底部留下对文档的反馈并要求澄清。
    猜你喜欢
    • 2012-12-04
    • 2021-09-15
    • 2010-10-24
    • 2012-01-08
    • 2011-11-04
    相关资源
    最近更新 更多