如何在.NET Core 2.0 MVC中使用Razor映射路径?

3

我正在尝试将一个布局页面转换为.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>
2个回答

8
在ASP.NET Core中,您可以使用服务来访问Web应用程序的某些路径。
此对象上有两个有趣的属性:
- ContentRootPath:应用程序基本路径的路径(您通常会在其中找到appsettings.json,Program.cs等) - WebRootPath:/wwwroot目录的路径,这就是您要查找的内容。
要访问服务,只需在控制器的构造函数中注入它并将其保存在字段中即可。
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中,以便在Index视图中轻松显示:
<h2>Index View</h2>

<p>Filepath: @ViewBag.FilePath</p>

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


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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接