1. ホーム
  2. .net

[解決済み] スレッドやタイマーでHttpServerUtility.MapPathメソッドにアクセスする方法とは?

2023-04-21 23:51:56

質問

私は System.Timers.Timer を使用していますが、Asp.Net アプリケーションで HttpServerUtility.MapPath メソッドを使用する必要がありますが、これは HttpContext.Current.Server.MapPath . 問題は HttpContext.Currentnull のとき Timer.Elapsed イベントが発生したときに

HttpServerUtility オブジェクトへの参照を取得する他の方法はありますか? 私はそれを私のクラスのコンストラクタに注入することができます。それは安全ですか?現在のリクエストの終わりにガーベッジコレクションされないことをどのようにして確認できますか?

ありがとうございます!

どのように解決するのですか?

この場合 HostingEnvironment.MapPath() の代わりに HttpContext.Current.Server.MapPath()

スレッドやタイマーイベントではまだ試していませんが。


私が考えたいくつかの(実行不可能な)解決策。

  • で私が気にする唯一のメソッドは HttpServerUtilityMapPath . というわけで、代替案として AppDomain.CurrentDomain.BaseDirectory を使い、ここからパスを構築することができます。 しかし、アプリケーションが仮想ディレクトリを使用している場合、これは失敗するでしょう (私のはそうです)。

  • 別のアプローチです。 必要なパスをすべて Global クラスに追加します。これらのパスを Application_Start .