1

Global.asax でメソッド中にシステム バージョンの比較を行っていOnApplicationStartedますが、データベース バージョンとシステム バージョンが一致しない場合、システムを起動できません。

したがって、次のようになります。

protected override void OnApplicationStarted()
{
  try{
     if(systemVersion != dbVersion)
        throw new Exception("They are not same!");
  }
  catch{
    //do some other things
    //Response.Redirect("~/VersionError.html");
  }
}

しかし、「このコンテキストでは応答を利用できません」と表示されます。エラーをキャッチしようとしましたApplication_Errorが、同じエラーが発生しました。

私の質問は、これらのメソッド内からユーザーをエラー ページにリダイレクトするにはどうすればよいかということです。

編集:

現時点で応答がないことはわかっていますが、この問題を回避する方法を尋ねていました. また、OnApplicationStarted の後にメソッドをヒットできる理由の 1 つは、この例外が発生した場合に多くのものをロードしたくないということです。

4

3 に答える 3

0

アプリケーションの起動時に応答にアクセスすることはできませんが、条件が満たされた場合にすべての着信要求をエラーページに移動させたいので、パイプラインのさらに上に何かを設定する必要があります。IISモジュールを考えてください。次の方法でモジュールをインストールします。

<system.webServer>
  <modules>
    <add name="VersionsNotSameHandler" 
         type="Company.Exceptions.VersionsNotSameHandler, Company.Exceptions" 
         preCondition="managedHandler" />
  </modules>
</system.webServer>

モジュールコードについて:

namespace Company.Exceptions
{
  public class VersionsNotSameHandler: IHttpModule
  {
    public void Dispose() { }

    public void Init(HttpApplication application)
    {
        context.PreRequestHandlerExecute += newEventHandler(OnPreRequestHandlerExecute) 
    }

    public void OnPreRequestHandlerExecute(Object source, EventArgs e){

        HttpApplication app = (HttpApplication)source; 
        HttpRequest request = app.Context.Request;
    // Check for invalid versioning
        app.Response.Redirect('.html page displaying error', true);
    }
  }
}

OnPreRequestはすべてのリクエストの前に発生し、バージョンが常にチェックされていることを確認します...速度が低下していることに気付いた場合は、キャッシュすることをお勧めします。

于 2013-03-01T17:17:04.120 に答える
0

この時点で応答はありません。アプリケーションの開始です。これは、応答が行われているときではなく、アプリケーションが開始されているときです。

すべてのリクエストをキャッチするデフォルト ルートを設定することで、この条件が満たされた場合に、すべての URL をエラー ページに誘導するように、ここに何かを設定できます。これにより、将来のリクエストでエラーページが表示されるため、必要な機能が提供されます。

于 2013-03-01T16:46:30.260 に答える
0

HTTP エラーをスローできますか:

throw new HttpException(403, "Forbidden");

そして、web.config で:

  <customErrors mode="On">
    <error statusCode="403" redirect="~/VersionError.html"/>
  </customErrors>
于 2013-03-01T16:52:02.147 に答える