有这样的辅助方法:
public static IHtmlContent Source(this IHtmlHelper html, string s)
{
var path = ServerMapPath() + "Views\\" + s;
我需要在asp.net核心
中获得相当于Server.MapPath的功能答案 0 :(得分:5)
您需要注入IHostingEnvironment
。然后:
var path = env.ContentRootPath + "Views\\" + s;
在html帮助器中,你可以这样做:
((IHostingEnvironment)html.ViewContext.HttpContext.RequestServices.GetService(typeof(IHostingEnvironment))).ContentRootPath;
答案 1 :(得分:1)
我推荐不要使用静态类。您可以保留与您的班级相似的内容,并将其注册为单身人士。
public class SourceClass
{
private readonly IWebHostEnvironment _webHostEnvironment;
public SourceClass (IWebHostEnvironment webHostEnvironment)
{
_webHostEnvironment= webHostEnvironment;
}
private IHtmlContent Source(this IHtmlHelper html, string s)
{
string contentRootPath = _webHostEnvironment.ContentRootPath;
Path.Combine(contentRootPath,"Views",s)
}
}
然后,在Startup.ConfigureServices中:
services.AddSingleton<SourceClass>();
最后,在需要的地方插入SourceClass
,而不仅仅是静态地引用该类。
(注意:@regna应该提供此解决方案,但它有一些缺点,我认为可以完全解决)
但是,如果您想使用静态方法,则可以这样做(注意:在 .Net Core 3 中,IHostingEnvironment
是绝对的,必须使用IWebHostEnvironment
来代替):< / p>
用于 ServerPath ,使用
((IWebHostEnvironment)html.ViewContext.HttpContext.RequestServices.GetService(typeof(IWebHostEnvironment))).ContentRootPath
OR
用于 WebRootPath(wwwroot),请使用
((IWebHostEnvironment)html.ViewContext.HttpContext.RequestServices.GetService(typeof(IWebHostEnvironment))).WebRootPath
在此answer中,您可以找到更多详细信息。
我也建议您使用此代码:
var path = Path.Combine(WebRootPath,"Views",s)
代替
var path = WebRootPath + "Views\\" + s
在所有操作系统上运行代码。
答案 2 :(得分:-1)
要获得完整的解决方案(MapPath(), IsPathMapped(), UnmapPath()
),请查看我对此问题的回答:Reading a file in MVC 6。