【问题标题】:how do you map path in razor for .net core 2.0 mvc?你如何在 razor 中为 .net core 2.0 mvc 映射路径?
【发布时间】:2017-12-19 18:54:54
【问题描述】:

我正在尝试将布局页面转换为 .net core 2.0。不幸的是,在 razor Server.MapPath 中不再可用。

我正在尝试在 .cshtml 页面中为

找到等效项
<div style="height: 0px; width: 0px; position: absolute; visibility: hidden;">
        @Html.Raw(System.IO.File.ReadAllText(Server.MapPath("~/Content/images/svg-defs.svg")))
    </div>

【问题讨论】:

    标签: asp.net-mvc razor asp.net-core-mvc


    【解决方案1】:

    在 ASP.NET Core 中,您可以使用 IHostingEnvironment 服务来访问 webapp 的某些路径。

    这个对象有两个有趣的属性:

    • ContentRootPath:应用程序基本路径的路径(您通常会在其中找到 appsettings.json、Program.cs 等
    • WebRootPath: /wwwroot 目录的路径,就是你要找的。​​li>

    要访问IHostingEnvironment 服务,只需将其注入控制器的构造函数并使用字段保持它。

    public class HomeController : Controller
    {
        private IHostingEnvironment _env;
    
        public HomeController(IHostingEnvironment env)
        {
            _env = env;   
        }
    }
    

    现在,在此控制器的操作方法中,您现在可以使用System.IO.Path.CombineWebRootPath 属性构造文件的物理路径。

    public IActionResult Index()
    {
        ViewBag.FilePath = Path.Combine(_env.WebRootPath, @"Content\images\svg-defs.svg");
        return View();
    }
    

    在此示例中,我将生成的路径添加到 ViewBag 以便在索引视图中轻松显示:

    <h2>Index View</h2>
    
    <p>Filepath: @ViewBag.FilePath</p>
    

    这将打印类似于C:\MySite\wwwroot\Content\images\svg-defs.svg 的内容

    【讨论】:

      【解决方案2】:

      在 .net Core 中,您可以使用 IHostingEnvironment 服务获取根路径。 您可以使用 HttpContext 在视图中获取此服务。

      @{
          var service = Context.RequestServices.GetService(typeof(Microsoft.AspNetCore.Hosting.IHostingEnvironment)) as Microsoft.AspNetCore.Hosting.IHostingEnvironment;
      }
      
      <span>Environment: @service.EnvironmentName</span>
      <span>WebRootPath: @service.WebRootPath</span>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-09-09
        • 2011-02-19
        • 2021-05-23
        • 1970-01-01
        • 2018-03-09
        • 1970-01-01
        • 2011-05-29
        相关资源
        最近更新 更多