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


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

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

      当我们使用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上下文的。

  • 相关阅读:
    iOS
    iOS NSNumber语法糖
    iOS 计算两个日期之间的天数问题
    iOS 获取当前媒体音量
    IAP (In-App Purchase)中文文档
    iOS zipzap读取压缩文件
    OC的内存管理机制
    OC 消息传递机制
    OS X环境下SVN回滚工程到指定版本,回滚指定文件到指定版本
    iOS 图片按比例压缩,指定大小压缩
  • 原文地址:https://www.cnblogs.com/AlexZha/p/8573797.html
Copyright © 2020-2023  润新知