7

Global.asax.cs の Application_Start 内で、次を使用して現在のアプリケーション パスを取得しようとしています。

var virtualPath = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority)
                          + HttpRuntime.AppDomainAppVirtualPath;

たとえば、次のように返されます。http://localhost:99/MySite/

次に、この URL を使用して、次のことを行います。

var pageToHit = virtualPath + Pages\MyOtherPage.aspx 
var client = new WebClient();
client.DownloadData(dummyPageUrl);

IIS 6 または Visual Studio の組み込み Web サーバーでプロジェクトを実行すると、これはすべて問題ありませんが、「System.Web.HttpException: Request is not available in this context」が発生するため、IIS 7 ではうまくいきません。

私はこのスレッドを認識しています: Request is not available in this context

ただし、プロジェクトをクラシックモードで実行するように変更せずに上記を行う方法について誰かが考えているかどうか疑問に思っていました。

4

1 に答える 1

5

統合モードで実行している場合、Application_Start 内の現在のリクエストの絶対 URL にアクセスできません。HostingEnvironment.ApplicationVirtualPath絶対 URL ではなく、使用して仮想パス名にアクセスできます。これは、一般的な回避策を説明する記事です。記事で説明されているように、2 つの可能性があります。

  1. リクエスト コンテキストを使用しないようにアプリケーション コードを変更します (推奨)。
  2. ロックとシングルトンを使用して初期化を実行し、Application_BeginRequestこの初期化が AppDomain の有効期間全体で 1 回だけ実行されるようにします。これは、この2番目のアプローチについて議論している同様のスレッドです。
于 2012-05-15T15:38:08.190 に答える