zoukankan      html  css  js  c++  java
  • asp.net获取文件绝对路径

    一般我们在asp.net中使用HttpContext.Current.Request.MapPath或者 HttpContext.Current.Server.MapPath来获取文件的绝对路径,

    public Class1()
    {
        string file = HttpContext.Current.Request.MapPath("~/App_Data/xxxxxx.xml");
    
        string text = System.IO.File.ReadAllText(file);
    
        //..........其它的操作
    }

    但有些情况下HttpContext.Current可能会为空,例如:
    1. 定时器的回调。
    2. Cache的移除通知。
    3. APM模式下异步完成回调。
    4. 主动创建线程或者将任务交给线程池来执行。

    在以上这些情况中,如果线程执行到HttpContext.Current,您认为会返回什么?
    还是一个HttpContext的实例引用吗?
    如何是,那它与哪个请求关联?

    显然,在1,2二种情况中,访问HttpContext.Current将会返回 null 。
    因为很有可能任务在运行时根本没有任何请求发生。
    了解异步的人应该能很容易理解第3种情况(就当是个结论吧)
    第4种情况就更不需要解释了,因为确实不是当前线程。

    再看上面代码,想像一下:如果Class1是在定时器回调或者Cache的移除通知时被创建的,您认为它还能正常运行吗?

    看到没:图片中HttpContext.Current显示的是 null ,所以您要是再调用MapPath,就必死无疑!

    在此我也奉劝大家一句:尽量不要用MapPath,HttpRuntime.AppDomainAppPath才是更安全的选择。

    详细解释可看:http://www.cnblogs.com/fish-li/archive/2013/04/06/3002940.html

  • 相关阅读:
    检测mysq组复制的脚本
    centos7安装NFS
    mysql组复制安装
    springboot+VUE(一)
    redis集群配置
    codevs 3139 栈练习3
    codevs 3138 栈练习2
    codevs 2622 数字序列
    codevs 1054 电梯
    codevs 1507 酒厂选址
  • 原文地址:https://www.cnblogs.com/lunawzh/p/5229615.html
Copyright © 2011-2022 走看看