【问题标题】: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.Combine 和WebRootPath 属性构造文件的物理路径。
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>