ASP.Net core 中Server.MapPath的替换方法

       最近忙着将原来的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就可以了,移植难度大大降低。

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值