我正在尝试从我的ASP.NET核心应用程序的wwwroot文件夹中的images文件夹中提供文件,我已经在Startup
类中启用了静态文件访问。
HostingEnvironment
服务为我提供了WebRootPath
属性,为我提供了wwwroot文件夹的绝对路径,但使用此路径在浏览器中给出了“不允许加载本地资源”错误控制台。
如果我使用localhost
+我的浏览器访问该文件,我可以获取图像文件,因此没有授权问题。
我现在需要的是能够将该绝对路径转换为我的Web服务器的相对路径。
答案 0 :(得分:6)
鉴于您遇到的错误,在我看来您尝试在视图中使用_env.WebRootPath + "/images/textfile.txt"
,例如作为href属性。
file:///C:/Users/PathToYourSite/wwwroot/images/textfile.txt
的网址,该网址以您遇到的错误结束。您可以详细了解该on this answer,但在moder Chrome等浏览器中,默认情况下会禁用从http协议到文件协议的请求。因此,当您想要将文件内容作为服务器端逻辑的一部分进行读取时,应使用IHostingEnvironment
方法,以便您可以对它们执行某些操作。
但是,如果您需要在wwwroot中生成指向文件的链接并在视图中使用它们,那么您有以下几种选择:
使用IUrlHelper
将公共网址解析为wwwroot中的文件,其中"~/"
是wwwroot文件夹。然后在需要时使用它,如href:
@Url.Content("~/images/textfile.txt")
使用以"~/"
开头的href属性直接在剃刀视图中创建锚点。 (你甚至可以在那里获得智能感知)
<a href="~/images/textfile.txt">Get file from wwwroot</a>
答案 1 :(得分:5)
要在wwwroot中访问文件,请将IHostingEnvironment
注入您的控制器构造函数:
private IHostingEnvironment _env;
public HomeController(IHostingEnvironment env)
{
_env = env;
}
更新您的控制器以读取WebRootPath
属性并附加相对文件路径
var content = System.IO.File.ReadAllText(_env.WebRootPath + "/images/textfile.txt");
这将读取位于/wwwroot/images/textfile.txt内的文件的所有内容
希望有所帮助