我正在尝试从我的ASP.NET核心应用程序的wwwroot文件夹中的images文件夹中提供文件,我已经在Startup类中启用了静态文件访问.
HostingEnvironment服务为我提供了一个WebRootPath属性,它为我提供了wwwroot文件夹的绝对路径,但使用此路径在浏览器的控制台中给出了“不允许加载本地资源”错误.
如果我使用localhost从我的浏览器访问该文件,我可以获取图像文件的相对路径,因此没有关于授权的问题.
我现在需要的是能够将该绝对路径转换为我的Web服务器的相对路径.
解决方法
鉴于您遇到的错误,在我看来,您正在尝试在视图中使用_env.WebRootPath“/images/textfile.txt”,例如作为href属性.
>这样做最终会在浏览器中尝试从您的页面请求一个类似于file:/// C:/Users/PathToYourSite/wwwroot/images/textfile.txt的网址,该网址以您遇到的错误结束.您可以阅读有关该on this answer的更多信息,但在moder Chrome等浏览器中,默认情况下会禁用从http协议到文件协议的请求.
因此,当您希望将文件内容作为服务器端逻辑的一部分读取时,应使用IHostingEnvironment方法,以便您可以对它们执行某些操作.
但是,如果您需要在wwwroot中生成指向文件的链接并在视图中使用它们,那么您有以下几种选择:
>使用IUrlHelper将公共URL解析为wwwroot中的文件,其中“〜/”是wwwroot文件夹.然后在需要时使用它,就像一个href:
@Url.Content("~/images/textfile.txt")
>使用以“〜/”开头的href属性直接在剃刀视图中创建锚点. (你甚至在那里获得intellisense)
<a href="~/images/textfile.txt">Get file from wwwroot</a>