如何在.net core 2.0 mvc的razor中映射路径?

Bry*_*ger 2 asp.net-mvc razor asp.net-core-mvc

我正在尝试将布局页面转换为.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>
Run Code Online (Sandbox Code Playgroud)

Sig*_*gge 6

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

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

  • ContentRootPath:应用程序基本路径的路径(通常可以在其中找到appsettings.json,Program.cs等
  • WebRootPath:/ wwwroot目录的路径,这就是您要查找的目录。

要访问该IHostingEnvironment服务,只需将其注入到控制器的构造函数中,然后使用字段将其保留即可。

public class HomeController : Controller
{
    private IHostingEnvironment _env;

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

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

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

在此示例中,我将结果路径添加到,ViewBag以轻松地在Index视图中显示它:

<h2>Index View</h2>

<p>Filepath: @ViewBag.FilePath</p>
Run Code Online (Sandbox Code Playgroud)

这将沿着 C:\MySite\wwwroot\Content\images\svg-defs.svg


Cem*_*tlu 6

在 .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>
Run Code Online (Sandbox Code Playgroud)