将绝对文件路径转换为相对

Nab*_*apa 8 asp.net-core-mvc asp.net-core asp.net-core-1.0

我正在尝试从我的ASP.NET核心应用程序的wwwroot文件夹中的images文件夹中提供文件,我已经在Startup类中启用了静态文件访问.

HostingEnvironment服务为我提供了一个WebRootPath属性,为我提供了wwwroot文件夹的绝对路径,但使用此路径在浏览器的控制台中给出了"不允许加载本地资源"错误.

如果我使用localhost+相对路径从我的浏览器访问该文件,我可以获取图像文件,因此没有关于授权的问题.

我现在需要的是能够将该绝对路径转换为我的Web服务器的相对路径.

Dan*_*.G. 6

鉴于您遇到的错误,在我看来您正试图_env.WebRootPath + "/images/textfile.txt"在您的视图中使用,例如作为href属性.

  • 这样做最终会在浏览器中尝试从您的页面请求一个看起来像的URL file:///C:/Users/PathToYourSite/wwwroot/images/textfile.txt,这会在您遇到的错误中结束.您可以在此答案中详细了解相关内容,但在moder Chrome等浏览器中,默认情况下会禁用从http协议到文件协议的请求.

因此,IHostingEnvironment当您想要将文件内容作为服务器端逻辑的一部分进行读取时,应使用该方法,以便您可以对它们执行某些操作.

但是,如果您需要在wwwroot中生成指向文件的链接并在视图中使用它们,您有以下几种选择:

  • 使用IUrlHelper以将公共URL解析为wwwroot中的文件,其中"~/"是wwwroot文件夹.然后在需要时使用它,就像一个href:

    @Url.Content("~/images/textfile.txt")
    
    Run Code Online (Sandbox Code Playgroud)
  • 直接在剃刀视图中创建锚点,其中href属性以"~/".(你甚至在那里获得intellisense)

    <a href="~/images/textfile.txt">Get file from wwwroot</a>
    
    Run Code Online (Sandbox Code Playgroud)


Hos*_*kat 5

要在wwwroot中访问文件,请注入IHostingEnvironment您的控制器构造函数:

private IHostingEnvironment _env;

public HomeController(IHostingEnvironment env)
{
    _env = env;
}
Run Code Online (Sandbox Code Playgroud)

更新控制器以读取WebRootPath属性并将相关文件路径附加到该属性

var content = System.IO.File.ReadAllText(_env.WebRootPath + "/images/textfile.txt");
Run Code Online (Sandbox Code Playgroud)

这将读取位于/wwwroot/images/textfile.txt内的文件的所有内容

希望有所帮助