Försöker implementera en global felhantering i min lilla webbapplikation. Men får ett felmeddelande så fort jag den försöker anropa sessionen: Det är nog bara så att Sessioner inte är tillgängliga i Application_Error. Det är nämligen så att sessioner enbart finns i ett begränsat antal events. Efter en del experimenterande så gav jag upp : ) Att Session inte finns i olika events beror på när session finns tillgänligt och när den inte finns.. Tex BeginRequest är så tidigt att ingen Session har skapats. Men är inte Ja, men du kommer inte åt sessioner på något sätt eftersom de inte är tillgängliga mera i Application_Error...Felhantering + Global.asax + Sessioner
<code>
Sessionstillståndet är inte tillgängligt i den här kontexten.
</code>
Kan det vara så att sessionen dör så fort användaren får ett fel, tex. skriver in en felaktig länk?
Sparar följande data i en session (med sessionskonstanter -> strängar)
-Felmeddelande (errormsg)
-Aktuella sidan (lastpage)
Application_Error i global.asax
try
{
Session[SessionConstants.ERRORMSG] = "Ingen information finns tillgängligt.";
Session[SessionConstants.LASTPAGE] = Request.CurrentExecutionFilePath;
Exception lastError = Server.GetLastError();
if (lastError != null)
{
lastError = lastError.GetBaseException();
Session[SessionConstants.ERRORMSG] = Convert.ToString(lastError.Message);
}
}
catch
{
Session[SessionConstants.ERRORMSG] = "Ingen information finns tillgängligt";
Session[SessionConstants.LASTPAGE] = String.Empty;
}
finally
{
Server.ClearError();
Server.Transfer("~/error.aspx");
}
Sen ska jag i error.aspx hämta felet och den aktuella sidan från sessionen och presenterar felet.
error.aspx
lblError.Text = Session[SessionConstants.ERRORMSG].ToString();
Har följande i web.config
<pages buffer ="true" enableSessionState="true" />
<customErrors mode="RemoteOnly" defaultRedirect="~/error.aspx" />
Har även testat:
System.Web.HttpContext.Current.Session[SessionConstants.ERRORMSG]
Men med samma resultat...
Sv: Felhantering + Global.asax + Sessioner
Till exempel finns det inte i BeginRequest heller.Sv:Felhantering + Global.asax + Sessioner
Fick baka en kaka och lägga in felmeddelandet i den för att sedan plocka upp det igen i min error.aspx...
Låter inlägget vara öppen då det skulle vara intressant och veta ifall det går att lösa med sessioner.Sv: Felhantering + Global.asax + Sessioner
När Application_Error anropas, så har session dött vid det tillfället (oftast, beror lite på).
Men i ditt fall kan du istället skriva:
protected void Application_Error(Object sender, EventArgs e)
{
HttpContext ctx = HttpContext.Current;
Exception exception = ctx.Server.GetLastError ();
string errorInfo =
"<br>Offending URL: " + ctx.Request.Url.ToString () +
"<br>Source: " + exception.Source +
"<br>Message: " + exception.Message +
"<br>Stack trace: " + exception.StackTrace;
ctx.Server.ClearError ();
}
ClearError will stoppa exception att bubbla upp..
Mvh Fredrik Normén
ASP.Net MVP - Cornerstone
Blog: http://fredrik.nsquared2.comSv:Felhantering + Global.asax + Sessioner
System.Web.HttpContext.Current.Session[SessionConstants.ERRORMSG]
det samma som
HttpContext ctx = HttpContext.Current;
ctx.Session[SessionConstants.ERRORMSG]
Sv: Felhantering + Global.asax + Sessioner