在定时器回调或者Cache的移除通知中,有时确实需要访问文件,然而对于开发人员来说, 他们并不知道网站会被部署在哪个目录下,因此不可能写出绝对路径, 他们只知道相对于网站根目录的相对路径,为了定位文件路径,只能调用HttpContext.Current.Request.MapPath或者 HttpContext.Current.Server.MapPath来获取文件的绝对路径。 如果HttpContext.Current返回了null,那该如何如何访问文件?
其实方法并非MapPath一种,我们可以访问HttpRuntime.AppDomainAppPath获取网站的路径,然后再拼接文件的相对路径即可:
看到没:图片中HttpContext.Current显示的是 null ,所以您要是再调用MapPath,就必死无疑!
在此我也奉劝大家一句:尽量不要用MapPath,HttpRuntime.AppDomainAppPath才是更安全的选择。
前面我还提到在APM模式下的异步完成回调时,访问HttpContext.Current也会返回null,那么此时该怎么办呢?
答案有二种:
1.
在类型中添加一个字段来保存HttpContext的引用(异步开始前)。
2.
将HttpContext赋值给BeginXXX方法的最后一个参数(object state)
建议优先选择第二种方法,因为可以防止以后他人维护时数据成员被意外使用。
内容转载自: HttpContext.Current并非无处不在 - Fish Li - 博客园
[开发笔记]-多线程异步操作如何访问HttpContext?,布布扣,bubuko.com
[开发笔记]-多线程异步操作如何访问HttpContext?
原文地址:http://www.cnblogs.com/babycool/p/3749812.html