有没有办法为 ASP.NET Core 中的内容设置通用根路径?

Posted

技术标签:

【中文标题】有没有办法为 ASP.NET Core 中的内容设置通用根路径?【英文标题】:Is there any way to set a generic root path for content in ASP.NET Core? 【发布时间】:2021-05-01 09:51:26 【问题描述】:

在发布模式下,我遇到了从 ASP.NET Core 应用程序的 wwwroot 文件夹访问静态文件的问题。我将静态文件保存在 wwwroot 文件夹中并使用相对路径访问它们,例如访问 wwwroot/images/test.png 以获取 imgsrc 属性/strong> 标签我指定 /images/test.png 并且图片在本地 IIS Express 开发模式下正确加载。

现在我已经在 IIS 管理器 (TestWebsite) 中创建了网站并将我的 Web 应用程序部署到其中,并且我还在站点 (TestApplicationPool) 中创建了应用程序池,因此它是层次结构如下所示:

我遇到的问题是,在将我的路径部署到静态文件并访问它们之后,我需要在任何路径之前都有 /TestApplicationPool (对于上面的示例,现在我需要指定/TestApplicationPool/images/test.png来访问图片)。所以我的问题是有什么办法可以配置 ASP.NET 应用程序始终使用当前应用程序作为内容根路径,这样我们就不需要在路径中指定任何内容,除了相对于 wwwroot 文件夹的静态文件的路径?

我试图从 IWebHostEnvironmentContentRootPath 变量中获取应用程序名称,并将其插入到静态文件的路径之前,在这种情况下一切正常,但不方便每次我们需要从 wwwroot 文件夹加载静态文件时都这样做。

【问题讨论】:

TestApplicationPool 是什么意思?应用程序池不是在网站本身下创建的。这里出了点问题。 从截图来看,TestApplicationPool其实是网站下的一个虚拟目录/应用,可能绑定了同名的应用池。可能只是不幸的命名导致混乱。 【参考方案1】:

在 MVC 视图或 Razor 页面中,您可以在路径上使用波浪号和斜线 (~/) 前缀来表示您的 cshtml 视图/页面中大多数位置的 Web 根目录(默认为 wwwroot)。

例如:

<img src="~/hello.jpg" />

即使部署在 IIS 中的虚拟目录下(如您的示例),这也应该转换为正确的路径。

关于 web root 的相关文档可以在这里找到,这里提到了 ~/ https://docs.microsoft.com/en-us/aspnet/core/fundamentals/?view=aspnetcore-5.0&tabs=windows#web-root

【讨论】:

以上是关于有没有办法为 ASP.NET Core 中的内容设置通用根路径?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP .NET Core 2.1 中将登录页面设为默认路由?

asp.Net core 2.2中的多种身份验证方法

ASP.NET Core 中的加密配置

没有 [ServiceFilter] 或 [TypeFilter] 的过滤器中的 Asp.net Core 依赖注入

将处理程序添加到 ASP.NET Core 中的默认 http 客户端 [重复]

有没有办法在 Asp.Net Core Identity 中将 PasswordHash 的数据类型从字符串更改为字节数组