【问题标题】:ASP.Net Core Custom Absolute Root PathASP.Net Core 自定义绝对根路径
【发布时间】:2020-03-09 18:51:00
【问题描述】:

在 ASP.Net Core Web 应用程序中,从特定路径搜索页面。例如,Razor Page 应用程序中的索引页面位于文件夹“Pages”(默认情况下)中,该文件夹相对于应用程序根文件夹。因此可以使用路径“/Index”访问该页面。

但是,我想通过真正的绝对路径访问页面。这意味着必须指定整个路径才能访问视图。在 Windows 上,完整路径可能是 C:/Project/Pages/Index.cshtml。但是 ASP.Net Core 默认不能处理这个,因为这个路径会被解析为:/Pages/C:/Project/Pages/Index.cshtml(相对于应用程序根目录,这是错误的.

如何更改此行为以使 ASP.Net Core 不会以这种方式干扰?我想改变这种行为的原因是,在 Linux 上,当路径以“/”开头时,它指向文件系统的根目录而不是应用程序的根目录。我希望到处都有相同的行为。

注意:我也不想使用波浪号(“~”)。

谢谢!

【问题讨论】:

  • 那么,您是否尝试加载 Web 应用程序之外的视图?
  • “通过真正的绝对路径访问页面 [...] 完整路径可能是 C:/Project/Pages/Index.cshtml” – 这似乎是个糟糕的主意.为什么你可能想要那个?应用程序代码应始终与自身相关。它不应该取决于源代码的位置。更不用说,一旦您部署到生产环境,它很可能是一个不同的位置。
  • @Scriptworks 不确定“outwith”是什么意思,但是,我只是尝试根据视图的真实绝对路径加载视图,无论它们位于何处。例如,在 PHP 中,我可以加载我想要的任何文件,只需指定路径即可从任何我想要的地方加载。
  • @poke 我同意,为了简洁起见,我只是省略了一些小细节。完整的路径实际上永远不会被硬编码,但更多的是:Application.RootPath + "/Pages/Index.cshtml"。我想要这个是因为以下情况:一些内容存储在静态 HTML 中,一些内容存储在 CSHTML 中。要加载 HTML,我使用 File.ReadAllText(absolutePath),但要加载部分视图,我必须执行以下操作:Html.RenderPartial(GetAppRelativePath(absolutePath0))。路径在运行时被确定为绝对路径(或者至少可以通过加入应用根目录轻松转换为绝对路径)。
  • 如果你想要runtime compilation for your Razor views 然后启用它。但是,将 ASP.NET Core 与 PHP 之类的东西进行比较的任何方法都根本行不通。这些是根本不同且不兼容的应用程序模型。

标签: c# asp.net-core path filepath razor-pages


【解决方案1】:

这真的很难,因为在部署应用程序时是 *.dll 文件,然后它不会在该路径中找到该文件。

我推荐使用相对路径“~”

【讨论】:

  • 这可能是默认行为,但您可以指定内容根目录,以便从例如“Pages”目录(而不是 .dll)访问 .cshtml 文件。这样做还可以让人们始终启用运行时编译,这是我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-13
相关资源
最近更新 更多