首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在线程或计时器中访问HttpServerUtility.MapPath方法?

如何在线程或计时器中访问HttpServerUtility.MapPath方法?
EN

Stack Overflow用户
提问于 2008-09-21 20:04:51
回答 6查看 40.4K关注 0票数 89

我在Asp.Net应用程序中使用了System.Timers.Timer,并且我需要使用HttpServerUtility.MapPath方法,该方法似乎只能通过HttpContext.Current.Server.MapPath使用。问题是,当触发Timer.Elapsed事件时,HttpContext.Currentnull

有没有其他方法可以获得对HttpServerUtility对象的引用?我可以把它注入到我的类的构造函数中。安全吗?我如何确保它不会在当前请求的末尾被垃圾回收?

谢谢!

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2008-09-21 21:19:40

可以不使用HttpContext.Current.Server.MapPath()而使用HostingEnvironment.MapPath()

不过,我还没有在线程或计时器事件中尝试过。

我考虑过的一些(不可行的)解决方案;

  • HttpServerUtility上,我唯一关心的方法就是MapPath。因此,作为替代,我可以使用AppDomain.CurrentDomain.BaseDirectory并由此构建我的路径。,但是如果你的应用程序使用虚拟目录(我的does).
  • Another方法:将我需要的所有路径添加到Global类中),这将失败。在Application_Start.

中解析这些路径

票数 143
EN

Stack Overflow用户

发布于 2009-01-27 23:31:21

我不知道这是否能解决您的虚拟目录问题,但我在MapPath中使用以下代码:

代码语言:javascript
复制
public static string MapPath(string path)
{
    if (HttpContext.Current != null)
        return HttpContext.Current.Server.MapPath(path);

    return HttpRuntime.AppDomainAppPath + path.Replace("~", string.Empty).Replace('/', '\\');
}
票数 14
EN

Stack Overflow用户

发布于 2012-07-10 05:52:06

HostingEnvironment不是完美的解决方案,因为它是一个很难模拟的类(请参阅How to unit test code that uses HostingEnvironment.MapPath)。

对于那些需要可测试性的人,更好的方法可能是按照https://stackoverflow.com/a/1231962/85196的建议创建您自己的路径映射器接口,除非将其实现为

代码语言:javascript
复制
public class ServerPathMapper : IPathMapper { 
 public string MapPath(string relativePath) { 
      return HostingEnvironment.MapPath(relativePath); 
 } 
} 

结果很容易被模仿,在内部使用HostingEnvironment,甚至可能同时处理ase69s's concern

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/111927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档