Yazdığım uygulamada hatarı global.asax içide application_error olayında yakalıyordum. Bunun için HttpModule yazmak daha doğru olurdu tabi.
Bir hata meydana geldiğinde gerekli loglamayı yaptıktan sonra kullanıcıyı login sayfasına yonlendirdim. (Burda bir parantez açıyım, application_error içinde hata yakalayıp Response.resirect ya da Server.Transfer ile herhangi bir yere yönlendirme yapmazsanız ASP.NET runtime hata alınan sayfayı göstermeye devam edecektir.
Buda hoş olmayan görüntülere neden olabiliyor. Bende sayfalar beyaz, pak bile hale gelmişti …)
Herneyse benden istenen hataları bir yere yönlendirmemdi. Application_Error olayına loglama işlemimden sonra aşağıdaki kodu ekledim ;
Response.Write("<h2>Global Page Error</h2>\n");
Response.Write("<p>" + objErr.Message + "</p>\n");
Response.Write("<a href='Login.aspx'>" + "Giriş Sayfası</a>\n");
Böyle bir durumdada kişi hata sayfası alsada back tuşu ile geriye dönüş yapabiliyordu. Bunun içinde herşeyi temizlemem gerekti.
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.AddHeader("pragma", "no-cache");
Response.AddHeader("cache-control", "private");
Response.CacheControl = "no-cache";
Response.Cache.SetExpires(DateTime.Now.AddMinutes(-1));
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cookies.Remove(FormsAuthentication.FormsCookieName);
Response.Cache.SetNoStore();
Session.Contents.RemoveAll();
Session.Abandon();
FormsAuthentication.SignOut();
Tam istediğim sonucu alamasamda kullanıcı hata aldığı sayfaya geri dönemicek
hale geldi. Kodların tamamı;
void Application_Error(object sender, EventArgs e)
{
StringBuilder sbHata = new StringBuilder();
Exception objErr = Server.GetLastError().GetBaseException();
if (objErr != null)
{
sbHata.Append(@"Error Caught in Application_Error event\n");
sbHata.Append("Error in: " + Request.Url.ToString());
sbHata.Append("\nError Message:" + objErr.Message.ToString());
sbHata.Append("\nStack Trace:" + objErr.StackTrace.ToString());
//sbHata.Append("\nUser IP: " + HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]);
sbHata.Append("\nDate-Time: " + DateTime.Now);
sbHata.Append("\nUser Agent: " + HttpContext.Current.Request.UserAgent);
sbHata.Append("\nOp Adı:" + User.Identity.Name);
if (HttpContext.Current.Session["…"] != null)
{
Mail gönder
}
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.AddHeader("pragma", "no-cache");
Response.AddHeader("cache-control", "private");
Response.CacheControl = "no-cache";
Response.Cache.SetExpires(DateTime.Now.AddMinutes(-1));
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cookies.Remove(FormsAuthentication.FormsCookieName);
Response.Cache.SetNoStore();
Session.Contents.RemoveAll();
Session.Abandon();
FormsAuthentication.SignOut();
Response.Write("<h2>Global Page Error</h2>\n");
Response.Write("<p>" + objErr.Message + "</p>\n");
Response.Write("<a href='Login.aspx'>" +"Giriş Sayfası</a>\n");
Server.ClearError();
//Response.Redirect("~/Login.aspx");
}
Bu arada yarın benim doğum günüm kendime şuanda dinlediğim müzik olan Hoobastank ten The Reason'ı armağan ediyorum.