zoukankan      html  css  js  c++  java
  • 线程编程中用到HttpContext.Current的方法封装

        在线程编程时能够为我们的性能提高不少,但是线程不是请求所以请求上下文我们就不能够用到!我在编程时遇到的几个地方留下个映像,同时也希望给不知道的同志们留个纪念!!!

        1.缓存(Cache):我们通常会从System.Web.HttpContext.Current.Cache获取,但是在线程中我们所得到的HttpContext.Current为null,所以我们得通过System.Web.HttpRuntime.Cache获得缓存实例,我们可以封装一个方法,这样我们就可以不用管他是在哪里都可以调用当前缓存了。代码如下:
     1 public class Cacher
     2 {
     3     private Cacher() { }
     4 
     5     private static readonly Cache cache;
     6 
     7     static Cacher() {
     8         HttpContext context = HttpContext.Current;
     9         if (context == null)
    10             cache = context.Cache;
    11         else
    12             cache = HttpRuntime.Cache;
    13     }
    14 }

        2.获取文件的物理路径:通常我们会用System.Web.HttpContext.Current.Request来获取当前的物理等有关路径或URL,通过System.Web.HttpContext.Current.Server.MapPath方法来获取当前文件或目录的物理路径。和上面一样在线程中这是解决不了问题的,我们可以通过应用程序域(System.AppDomain.CurrentDomain.BaseDirectory)来获得根目录。
     1         public static string RootPath() {
     2             return RootPath("/");
     3         }
     4 
     5         public static string RootPath(string filePath)
     6         {
     7             string rootPath = AppDomain.CurrentDomain.BaseDirectory;
     8             string separator = Path.DirectorySeparatorChar.ToString();
     9             rootPath = rootPath.Replace("/", separator);
    10             if (filePath != null)
    11             {
    12                 filePath = filePath.Replace("/", separator);
    13                 if (((filePath.Length > 0&& filePath.StartsWith(separator)) && rootPath.EndsWith(separator))
    14                 {
    15                     rootPath = rootPath + filePath.Substring(1);
    16                 }
    17                 else
    18                 {
    19                     rootPath = rootPath + filePath;
    20                 }
    21             }
    22             return rootPath;
    23         }
    24 
    25         public string PhysicalPath(string path)
    26         {
    27             return (RootPath().TrimEnd(new char[] { Path.DirectorySeparatorChar })
                    + Path.DirectorySeparatorChar.ToString() + path.TrimStart(new char[] { Path.DirectorySeparatorChar }));
    28         }
    29 
    30         public string MapPath(string path)
    31         {
    32             HttpContext context = HttpContext.Current;
    33             if (context != null)
    34             {
    35                 return context.Server.MapPath(path);
    36             }
    37             return PhysicalPath(path.Replace("/", Path.DirectorySeparatorChar.ToString()).Replace("~"""));
    38         }

        OK,暂时先逮住这两个家伙,以后发现了再补上!!!

  • 相关阅读:
    数据库中导入json数据
    EntityFrameWork Core创建数据库并且使用
    AutoMapper自动映射框架的使用(一)
    值类型和引用类型
    Windows10家庭版安装docker
    Manjaro Linux系统安装
    STM32之USMART的简单介绍
    DSP28335笔记
    张飞第二部:直流无刷电机 直流电源 电感 热水循环泵系统
    高输入阻抗 低输出阻抗 的意义
  • 原文地址:https://www.cnblogs.com/xdotnet/p/aspnet_threading_httpcontext.html
Copyright © 2011-2022 走看看