11

Ich bereite etwas Legacy-Framework-Code und eine riesige Menge davon ist einfach durch Ausnahme codieren. Es werden keine Werte überprüft, um festzustellen, ob sie null sind. Daher werden zahlreiche Ausnahmen ausgelöst und abgefangen.Wie zu vermeiden "Response.Redirect kann nicht in einem Page Callback aufgerufen werden"

Ich habe die meisten von ihnen aufgeräumt, jedoch gibt es ein paar Fehler/Login/Sicherheit bezogenen Framework-Methoden, die Response.Redirect tun und jetzt, dass wir Ajax verwenden, bekommen wir viel von "Response .Redirect kann nicht in einem Seiten-Callback aufgerufen werden. " Und ich würde das gerne vermeiden, wenn irgend möglich.

Gibt es eine Möglichkeit, diese Ausnahme programmatisch zu vermeiden? Ich bin auf der Suche nach so etwas wie

if (Request.CanRedirect) 
    Request.Redirect("url"); 

Hinweis, dies auch mit Server.Transfer geschieht, so dass ich mag in der Lage sein zu überprüfen, ob ich in der Lage bin Request.Redirect OR Server.Transfer zu tun.

Derzeit seine einfach tun dies

try 
{ 
    Server.Transfer("~/Error.aspx"); // sometimes response.redirect 
} 
catch (Exception abc) 
{ 
    // handle error here, the error is typically: 
    // Response.Redirect cannot be called in a Page callback 
} 

Antwort

13

Sie können versuchen,

if (!Page.IsCallback) 
    Request.Redirect("url"); 

oder wenn Sie nicht eine Seite praktisch ...

try 
{ 
    if (HttpContext.Current == null) 
     return; 
    if (HttpContext.Current.CurrentHandler == null) 
     return; 
    if (!(HttpContext.Current.CurrentHandler is System.Web.UI.Page)) 
     return; 
    if (((System.Web.UI.Page)HttpContext.Current.CurrentHandler).IsCallback) 
     return; 

    Server.Transfer("~/Error.aspx"); 
} 
catch (Exception abc) 
{ 
    // handle it 
} 
+0

Wo in HttpContext.Current kann ich IsCallback finden? Ich habe nicht immer eine Seite –

+0

Ah, fand es, ich fügte den Code hinzu, den ich zu Ihrer Antwort verwendete, da Ihr Schnipsel wirklich alles ist, was ich brauchte. Ich kann nicht glauben, dass ich nicht an etwas so Einfaches denke, heh. Danke mann –

1

sollten Sie laden Sie Ihre ScriptManager oder ScriptManagerProxy und dann das IsInAsyncPostBack-Flag. in etwa so aussehen, dass würde:

ScriptManager sm = this.Page.Form.FindControl("myScriptManager") as ScriptManager; 
if(!sm.IsInAsyncPostBack) 
{ 
    ... 
} 

Auf diese Weise können Sie asynchroner Postbacks mischen (die ausfallen sollte umleiten) mit normalen Postbacks, die ich nehme an, Sie noch umleiten möchten.

+0

hrm, könntest du erklären, was der Unterschied zwischen diesem und Page.IsCallback ist? –

+0

Es sieht so aus, als ob der Unterschied darin besteht, dass IsCallback für die ASP.net ICallbackEventHandler-Schnittstelle arbeitet, während IsInAsyncPostBack für UpdatePanel-basierte Änderungen funktioniert. Dies ist der direkte Vergleich zwischen ihnen konnte ich finden: http://timstall.dotnetdevelopersjournal.com/avoiding_unnecessary_server_work_in_aspnet.htm –

+1

Sie auch ScriptManager.GetCurrent (Seite) nutzen können; – Karsten

6

Ich glaube, Sie können einfach ersetzen Server.Transfer() mit Response.RedirectLocation(), die während des Rückrufs funktioniert.

try 
{ 
    Response.RedirectLocation("~/Error.aspx"); // sometimes response.redirect 
} 
catch (Exception abc) 
{ 
    // handle error here, the error is typically: 
    // Response.Redirect cannot be called in a Page callback 
} 
+1

Für den Datensatz finde ich (ASP.NET 4.x), dass a) 'Response.RedirectLocation' ist eine Eigenschaft keine Methode, und b) es erweitert nicht die' ~ 'Notation, so dass Sie Response.RedirectLocation benötigen = Page.ResolveUrl ("~/Error.aspx") '. – JonBrave

1

Wie oben erwähnt, sondern erweitert die .NET Version 4.x zu schließen und die Zuordnung zu den Response.RedirectLocation Eigenschaft, wenn es keine Page verfügbar ist.

try 
{ 
    HttpContext.Current.Response.Redirect("~/Error.aspx"); 
} 
catch (ApplicationException) 
{ 
    HttpContext.Current.Response.RedirectLocation =  
         System.Web.VirtualPathUtility.ToAbsolute("~/Error.aspx"); 
} 
Verwandte Themen