ASP.Net core 中Server.MapPath的替换方法_shanghaimoon的博客-CSDN博客

string webRootPath = _hostingEnvironment.WebRootPath;             string contentRootPath = _hostingEnvironment.ContentRootPath;

来源: ASP.Net core 中Server.MapPath的替换方法_shanghaimoon的博客-CSDN博客

最近忙着将原来的ASP.NET项目迁移到ASP.NET core平台,整体还比较顺利,但其中也碰到不少问题,其中比比较值得关注的一个问题是,在netcore平台中,System.Web程序集已经取消了,要获取HttpContext并不是太容易,好在通过依赖注入,还是可以得到的,具体方法不在本文的讨论范围,大家可以自行百度。但是在得到了netcore版本的HttpContext后,发现已经不再有Server.MapPath函数了,而这个函数在以前是会被经常引用到的。

通过百度研究,发现也是有替代方法的,依然是通过强大的依赖注入,代码如下:

using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;

namespace AspNetCorePathMapping
{
public class HomeController : Controller
{
private readonly IHostingEnvironment _hostingEnvironment;

public HomeController(IHostingEnvironment hostingEnvironment)
{
_hostingEnvironment = hostingEnvironment;
}

public ActionResult Index()
{
string webRootPath = _hostingEnvironment.WebRootPath;
string contentRootPath = _hostingEnvironment.ContentRootPath;

return Content(webRootPath + “\n” + contentRootPath);
}
}
}
从上面可以看出,通过WebRootPath的使用,基本可以达到Server.MapPath同样的效果。但是这是在controller类中使用,如果是在普通类库中改怎么获取呢,或者有没有更简洁的方法呢?答案是肯定的,先上代码:

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace HH.Util
{
public static class CoreHttpContext
{
private static Microsoft.AspNetCore.Hosting.IHostingEnvironment _hostEnviroment;
public static string WebPath => _hostEnviroment.WebRootPath;

public static string MapPath(string path)
{
return Path.Combine(_hostEnviroment.WebRootPath, path);
}

internal static void Configure(Microsoft.AspNetCore.Hosting.IHostingEnvironment hostEnviroment)
{
_hostEnviroment = hostEnviroment;
}
}
public static class StaticHostEnviromentExtensions
{
public static IApplicationBuilder UseStaticHostEnviroment(this IApplicationBuilder app)
{
var webHostEnvironment = app.ApplicationServices.GetRequiredService<Microsoft.AspNetCore.Hosting.IHostingEnvironment>();
CoreHttpContext.Configure(webHostEnvironment);
return app;
}
}
}
然后在Startup.cs的Configure方法中:

app.UseStaticHostEnviroment();
这样的话,只需要将原来的Server.Path替换为CoreHttpContext.MapPath就可以了,移植难度大大降低。
————————————————
版权声明:本文为CSDN博主「shanghaimoon」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/shanghaimoon/article/details/114338839

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏