码迷,mamicode.com
首页 > 编程语言 > 详细

ASP.NET多线程下使用HttpContext.Current为null解决方案

时间:2018-03-15 16:19:46      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:color   serve   trim   对象   ati   上下   路径   解决办法如下   msdn   

问题一:多线程下获取文件绝对路径

 

问题一:多线程下获取文件绝对路径

  当我们使用HttpContext.Current.Server.MapPath(strPath)获取绝对路径时HttpContext.Current为null,解决办法如下: 


 
      /// 
        /// 获得当前绝对路径
        /// 
        /// 指定的路径
        /// 绝对路径
        public static string GetMapPath(string strPath)
        {
            if (strPath.ToLower().StartsWith("http://"))
            {
                return strPath;
            }
            if (HttpContext.Current != null)
            {
                return HttpContext.Current.Server.MapPath(strPath);
            }
            else //非web程序引用
            {
                strPath = strPath.Replace("/""\\");
                if (strPath.StartsWith("\\") || strPath.StartsWith("~"))
                {
                    strPath = strPath.Substring(strPath.IndexOf(\\1)).TrimStart(\\);
                }
                return System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, strPath);
            }
        }

 

问题二:多线程下获取缓存问题

 多线程下使用HttpContext.Current.Cache.Get(key)获取缓存时HttpContext.Current为null,解决办法如下:

HttpRuntime.Cache.Get(key);

从MSDN上的解释可以看出,HttpRuntime.Cache是应用程序级别的,而HttpContext.Current.Cache是针对当前WEB上下文定义的。

然而,实际上,这二个都是调用的同一个对象,不同的是:HttpRuntime下的除了WEB中可以使用外,非WEB程序也可以使用。

而HttpContext则只能用在WEB中。因此,在可能的情况下,我们尽可能使用HttpRuntime(然而,在不同应用程序之间如何调用也是一个问题)。

问题三:多线程下使用Html转码问题

多线程下使用HttpContext.Current.Server.HtmlEncode(Htmlstring)转码HttpContext.Current为null,解决办法如下:

HttpUtility.HtmlEncode(Htmlstring)

总之,HttpContext不是万能的,当多线程调用,或是用机器模拟调用时,此时是没有HttpContext上下文的。

ASP.NET多线程下使用HttpContext.Current为null解决方案

标签:color   serve   trim   对象   ati   上下   路径   解决办法如下   msdn   

原文地址:https://www.cnblogs.com/AlexZha/p/8573797.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!