asp.net-core - 将绝对文件路径转换为相对路径

标签 asp.net-core asp.net-core-mvc asp.net-core-1.0

我正在尝试从我的 ASP.NET Core 应用程序的 wwwroot 文件夹中的图像文件夹中提供文件,我已经在 Startup 中启用了静态文件访问。类(class)。
HostingEnvironment服务为我提供了 WebRootPath该属性为我提供了 wwwroot 文件夹的绝对路径,但使用此路径会在我的浏览器控制台中出现“不允许加载本地资源”错误。

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

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

最佳答案

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

  • 这样做最终会导致浏览器尝试从您的页面请求一个看起来像 file:///C:/Users/PathToYourSite/wwwroot/images/textfile.txt 的 URL。 ,以您遇到的错误结束。你可以阅读更多关于 on this answer ,但在现代 Chrome 等浏览器中,默认情况下禁用从 http 协议(protocol)到文件协议(protocol)的请求。

  • 所以IHostingEnvironment当您想要读取文件的内容作为服务器端逻辑的一部分时,应该使用方法,这样您就可以对它们做一些事情。

    但是,如果您需要在 wwwroot 中生成指向您的文件的链接并在您的 View 中使用它们,您有几个选择:
  • 使用 IUrlHelper将公共(public) url 解析为 wwwroot 内的文件,其中 "~/"是 wwwroot 文件夹。然后在需要时使用它,例如 href:
    @Url.Content("~/images/textfile.txt")
    
  • 使用以 "~/" 开头的 href 属性直接在 razor View 中创建 anchor . (你甚至在那里得到智能感知)
    <a href="~/images/textfile.txt">Get file from wwwroot</a>
    
  • 关于asp.net-core - 将绝对文件路径转换为相对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38786781/

    相关文章:

    macos - "SharedCompilationId"任务不支持 ASP.NET CORE 2.1 Preview "Csc"参数

    c# - 创建通用存储库,用于使用 EFCore 从存储过程返回数据

    c# - 使用 Serilog 的 Azure 日志分析已停止日志记录(MVC 核心)

    asp.net-core - 从 RC2 迁移到 1.0 : Returning 'dynamic' from controller action causes strange web api response

    asp.net-core - 使用 Blazor Asp.Net Core 的 Bootstrap 模态弹出窗口

    asp.net-core - StackExchange.Redis:如何配置 Redis 实例

    asp.net-core - EF Core 中不必要的关系加载

    Azure 应用服务托管内部技术

    c# - 如何在 ASP.NET MVC 6 中继续使用 ModelState 和 RedirectToAction?

    c# - ASP.NET Core 无法读取请求正文