【问题标题】:In ASP.NET how you get the physcial file path when HttpContext.Current is NULL?在 ASP.NET 中,当 HttpContext.Current 为 NULL 时如何获取物理文件路径?
【发布时间】:2010-09-11 16:15:36
【问题描述】:

我正在使用 DotNetNuke 的调度程序来安排任务,并且我正在寻找我创建的电子邮件模板的物理文件路径。问题是 HttpContext 为 NULL,因为计划任务在不同的线程上并且没有 http 请求。您将如何获取文件的物理路径?

【问题讨论】:

    标签: .net asp.net dotnetnuke scheduler server.mappath


    【解决方案1】:

    System.Web.Hosting.HostingEnvironment.MapPath 是您正在寻找的。每当您使用 Server 或 HttpContext.Current 对象时,请先检查HostingEnvironment 是否有您需要的内容。

    【讨论】:

    • 如果您不在 Web 项目之外,但想进入 Web 项目的 images 文件夹以获取图像或阅读,比如说 .htm 文件的内容,这些内容位于您的网站中,该怎么办?但是您有一个实用方法要在外部调用以获取该文件?
    • 如果您不在网络项目之外,我认为无论如何您都需要自己的自定义代码来定位网络项目。一旦你明白了,你就可以继续沿着这条路走,而不需要像 MapPath 这样的特殊帮助。
    【解决方案2】:

    有很多方法可以做到这一点,我个人通过将路径信息存储为我的模块的配置选项来解决它,它并不优雅,但它每次都有效且有效。

    Joe Brinkman 我相信在某个地方有一篇关于如何构造新的 HTTPContext 以在调度程序中使用的博客文章。

    【讨论】:

    【解决方案3】:

    您能否像这样查看 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 ...
    

    【讨论】:

      【解决方案4】:

      this.GetType().Assembly.Location 怎么说?

      【讨论】:

      • 返回 c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\mywebsite\50f1a686\ab5b581d\App_Code.xkcsxvg6.dll
      【解决方案5】:

      由于这个过程对于网站来说确实是带外的,也许你可以把路径放在一个配置文件中。

      可能不是最好的主意,但它是一个替代方案。

      【讨论】:

        猜你喜欢
        • 2012-06-04
        • 1970-01-01
        • 2019-05-04
        • 1970-01-01
        • 2011-02-19
        • 1970-01-01
        • 2011-09-20
        • 1970-01-01
        • 2012-02-21
        相关资源
        最近更新 更多