[.net] 如何訪問Thread或Timer中的HttpServerUtility.MapPath方法?


Answers

我不知道這是否會解決你的虛擬目錄問題,但我使用MapPath:

public static string MapPath(string path)
{
    if (HttpContext.Current != null)
        return HttpContext.Current.Server.MapPath(path);

    return HttpRuntime.AppDomainAppPath + path.Replace("~", string.Empty).Replace('/', '\\');
}
Question

我在我的Asp.Net應用程序中使用System.Timers.Timer ,我需要使用HttpServerUtility.MapPath方法,它似乎只能通過HttpContext.Current.Server.MapPath 。 問題是當Timer.Elapsed事件觸發時, HttpContext.Currentnull

是否有另一種方法來獲取對HttpServerUtility對象的引用? 我可以在我的類的構造函數中註入它。 它安全嗎? 我如何確定它不會在當前請求結束時收集垃圾?

謝謝!




我認為當時為什麼它為空的原因(如果你仔細想一想),計時器已過時事件不會作為HTTP請求的一部分發生(因此沒有上下文)。 這是由您的服務器上的某些內容引起的。




你可以在啟動定時器之前不調用MapPath函數,並簡單地緩存結果? 在tick事件中使用MapPath調用是否絕對必要?