在ASP.NET中,当HttpContext.Current为NULL时,如何获取物理文件路径?
时间:2020-03-06 14:29:32 来源:igfitidea点击:
我正在与DotNetNuke的调度程序一起调度任务,并且希望获得我创建的电子邮件模板的物理文件路径。问题在于HttpContext为NULL,因为计划的任务位于不同的线程上,并且没有http请求。我们将如何获取文件的物理路径?
解决方案
由于此过程相对于网站而言确实是带外的,因此我们可以仅将路径放入配置文件中。
可能不是最好的主意,但它是替代方法。
怎么说this.GetType()。Assembly.Location?
我们可以这样看一下Assembly和CodeBase路径吗:
Imports System.Reflection Imports System.IO ... Path.GetDirectoryName( Assembly.GetExecutingAssembly().CodeBase )
这种东西并不总能奏效,所以我建议做的是编写包含大量有关程序集数据的日志,以查看在该位置有效的方法。这是我创建要托管在AppCenter中的COM组件时必须要做的事情。我用它来"获取"应为" APP_BASE"的内容,并进行设置,以便app.config文件可以正确加载。
Log.Write ( Assembly.GetExecutingAssembly().CodeBase ) Log.Write ( Assembly.GetExecutingAssembly().Location ) Log.Write ( Path.GetFullPath(".") ) Log.Write ( Application.StartupPath ) ... and so on, whatever you can think of ...
我们正在寻找System.Web.Hosting.HostingEnvironment.MapPath。每当使用Server或者HttpContext.Current对象时,请首先检查HostingEnvironment是否具有所需的对象。
这样做有很多方法,我个人通过将路径信息存储为模块的config选项来解决它,虽然它不是很优雅,但是它每次都能工作。
乔·布林克曼(Joe Brinkman)我相信某处有一篇博客文章,介绍如何构造新的HTTPContext以便在调度程序中使用。