17

私のグローバルには、エラーが発生したときに処理する次のコードがあります

//[..] code goes here
  Server.Transfer("~/Error.aspx?ErrorID=" + errorId);

URLを変更したことを除いて、Response.Redirect以前は完全に機能していました(これが私が使用したい理由ですServer.Transfer

残念ながら、エラー ページをロードしようとすると、Masterpage を参照しようとするとクラッシュします。Session

HttpException:
セッション状態は、構成ファイルまたは Page ディレクティブで enableSessionState が true に設定されている場合にのみ使用できます。System.Web.SessionStateModule またはカスタム セッション状態モジュールがアプリケーション構成の \\ セクションに含まれていることも確認してください。

設定とページの両方に enableSessionState があります。

Context.RewritePath の使用を提案するリンクもいくつか見つけました。これにより、空白のページが読み込まれます。

UsingResponse.Redirectは完全に期待どおりに機能するため、Server.Transferここで問題があると思います。それは何ですか?

編集コード:

protected void Application_Error(object sender, EventArgs e)
        {

            lock (_lockMe)
            {
                Exception ex = Server.GetLastError();

                if (ex != null)
                {
                    if (ex.InnerException != null)
                        ex = ex.InnerException;

                    ErrorLoggingManager.AddError(ex, new MembershipData(), ...); //etc
                }

                Server.ClearError();

                   //Some other database code for cleaning up some stuff when an error happens

                }

                try
                {
                    if (Response != null)
                    {
                        //Get the last error logged
                        MyDataContext db = new MyDataContext();
                        int errorId = db.LoggedErrors.OrderByDescending(le => le.ErrorId).Select(le => le.ErrorId).FirstOrDefault();

                        Server.Transfer("~/Error.aspx?ErrorID=" + errorId); 
                    }
                }
                catch (Exception)
                {
                }
            }
4

9 に答える 9

2

As you have not posted much code. So without seeing the actual implementation you have done. I could suggest you below points.

Point 1. First of all, you need to check if SessionState is enabled for pages. You could set them globally in web.config file. Try the snippet given below in web.config

<configuration>   
   <system.web>
   <pages enableSessionState="true" />
  </system.web>
</configuration>

Point 2. And put your Redirection in Application_Error in Global.asax.

public void Application_Error(object sender, EventArgs e)
{
     HttpApplication app = (HttpApplication)sender;
     app.Server.Transfer("~/Error.aspx?ErrorID=" + errorId,true);
 }

Point 3. Also check if your SessionStateis set properly in IIS too.

Details are on MSDN to enable sessionstate

Hope this helps..!!!

于 2014-02-19T08:40:14.357 に答える
1

問題は次のとおりです。

ページ レンダリングの例外 (「ファイルが見つかりません」など) がある場合、Server.Transfer はセッションを台無しにします。これは、ページのレンダリング中に呼び出されることに関係しています。

エラーが発生する前にヘッダーを追加しない限り、Response.Redirect は正常に機能します。ただし、Response.AppendHeader を使用している場合、Response.Redirect はページのレンダリング中に機能しません。

代わりに HttpContext.Current.RewritePath を使用してみてください。これで、これらすべての問題が解決するはずです。なんらかの理由で、RewritePath() は、ページのレンダリングが完了していないことを気にしません。

于 2015-11-09T20:43:07.203 に答える
0

@ user2110845 : 数か月前に同様の問題に直面しました。問題は、Web サイト名にアンダースコアが含まれていることでした。2 つの異なるホスト名を使用して IIS に Web サイトを展開していました (Web サイトの [バインドの編集] オプションを使用して 2 つのエントリを追加します)。提供されたホスト名は、abc_ts、abc_is でした。アンダースコアが削除されると、セッションの問題は解決されました。Web サイトのホスト名に使用できない文字があるようです。それがあなたの問題かどうかを確認してください。ここで答えを見つけました:リンク(記事の「更新2」を確認してください)

于 2014-02-20T04:49:56.047 に答える
0

使用している ASP.NET のバージョンについては言及していませんが、2.0 と 3.5 の間で、未処理の例外が ASP.NET Web アプリ、次に IIS を通過する方法にいくつかの変更がありました。

他のいくつかの可能性の中で、設定していないエラーをクリアしているContext.Response.TrySkipIisCustomErrors = true;間、この特定のフラグは問題とは何の関係もない可能性があります (3.5+ でのみ利用可能です) が、潜在的に 2 つのエラーページの背後にあるものに対処するのにも役立ちます。本当の問題を覆い隠しているシーン。いずれにせよ、他の潜在的な問題に悩まされることはありません (少なくとも 3.5 以降を実行している場合)。参考になるかもしれない数年前に書いた 2 つの投稿を確認してください。セッション処理については説明していませんが、さまざまなバージョンの ASP で適切な 500 および 404 処理を行うために従わなければならなかった複数の歌と踊りのルーチンについて説明しています。 。ネット。そこまで行かなくても、さらに前進できる何かに出くわす可能性があります。

http://www.andornot.com/blog/post/Errors-Sending-the-Right-Message-(Redux-Covering-ASPNET-3540).aspx

http://www.andornot.com/blog/post/Errors-Sending-the-Right-Message.aspx

于 2014-02-25T08:18:19.820 に答える
0

リダイレクトを行うために web.config で customErrors を使用しないのはなぜですか?

<customErrors mode="Off" defaultRedirect="~/Common/Error.aspx">
  <error statusCode="403" redirect="~/SM_AccessDenied.aspx" />
  <error statusCode="404" redirect="~/Common/FileNotFound.aspx" />
</customErrors>
于 2014-02-18T17:57:07.343 に答える
0

少し前に、別のコンテキストで同じ問題が発生しました。あなたのケースかどうかはわかりませんが、Windows 2008 で IIS7 を使用している場合はenableSessionState=true、web.config での設定に加えて、モジュールを<system.webServer>ではなく セクション内に配置する必要があります<system.web>。この小さなことを変更することで解決しました。

于 2014-02-18T17:57:57.473 に答える
0

発生しているエラーは、クエリ文字列パラメーターを使用しているためです。msdn ドキュメントによると

However, the path parameter must not contain a query string, or ASP returns an error.

http://msdn.microsoft.com/en-us/library/ms525800%28v=vs.90%29.aspx

要件のすぐ上のページの約 3/4 です。

ここのドキュメントはaspに言及していますが。asp.netではなく、セッション状態はIISの機能であり、asp.netが呼び出される前に処理されることに注意してください。

于 2014-02-20T04:34:40.717 に答える