博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
asp.net获取文件绝对路径
阅读量:6402 次
发布时间:2019-06-23

本文共 879 字,大约阅读时间需要 2 分钟。

一般我们在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

 

转载于:https://www.cnblogs.com/lunawzh/p/5229615.html

你可能感兴趣的文章
IEnumerable的谨慎使用和IQueryable 的延迟执行
查看>>
业务架构师的服务(靠什么赚钱),从事这一职业需要什么知识?
查看>>
Async Java HTTP client
查看>>
android 关闭app简要说明
查看>>
hibernate validator自定义校验注解以及基于服务(服务组)的校验
查看>>
Leetcode_num2_Maximum Depth of Binary Tree
查看>>
Android笔记二十四.Android基于回调的事件处理机制
查看>>
jquery checkbox勾选/取消勾选只能操作一次的诡异问题
查看>>
友盟统计小白教程:创建应用,申请appkey
查看>>
Multi-Tenancy模式,基础服务大规模扩张的时候,是应该推进了。
查看>>
var result = eval('(' + data + ')');的学习
查看>>
【sqli-labs】Less7
查看>>
文件操作之循环
查看>>
【Java学习笔记之二十】final关键字在Java继承中的用法小结
查看>>
Apache-kylin-2.0.0-bin-hbase1x.tar.gz的下载与安装(图文详解)
查看>>
String literal is not properly closed by a double-quote eclipse
查看>>
第三百四十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—cookie禁用、自动限速、自定义spider的settings,对抗反爬机制...
查看>>
ARM 编程平台+coresight
查看>>
[解读REST] 1.REST的起源
查看>>
Android零基础入门第39节:ListActivity和自定义列表项
查看>>