SORU
23 Temmuz 2009, PERŞEMBE


Özel Hata İşleme Application_Error ASP.NET MVC Küresel.asax?

MVC benim uygulama hataları belirlemek için bazı temel kod var. Şu anda projem için bir kumanda Error denilen eylem yöntemleri HTTPError404(), HTTPError500() General() var. Onlar 7* *string bir parametre olarak kabul ediyor. Ya da aşağıdaki kodu kullanarak değiştirme. İşlem için Hata kontrol cihazına veri aktarmak için en iyi/uygun yol nedir? Mümkün olduğunca sağlam bir çözüm istiyorum.

protected void Application_Error(object sender, EventArgs e)
{
    Exception exception = Server.GetLastError();
    Response.Clear();

    HttpException httpException = exception as HttpException;
    if (httpException != null)
    {
        RouteData routeData = new RouteData();
        routeData.Values.Add("controller", "Error");
        switch (httpException.GetHttpCode())
        {
            case 404:
                // page not found
                routeData.Values.Add("action", "HttpError404");
                break;
            case 500:
                // server error
                routeData.Values.Add("action", "HttpError500");
                break;
            default:
                routeData.Values.Add("action", "General");
                break;
        }
        routeData.Values.Add("error", exception);
        // clear error on server
        Server.ClearError();

        // at this point how to properly pass route data to error controller?
    }
}

CEVAP
23 Temmuz 2009, PERŞEMBE


Bunun için yeni bir rota oluşturmak yerine, sadece denetleyici/eylem Yönlendirme ve sorgu dizesi yoluyla bilgi verir misin? Örneğin:

protected void Application_Error(object sender, EventArgs e) {
  Exception exception = Server.GetLastError();
  Response.Clear();

  HttpException httpException = exception as HttpException;

  if (httpException != null) {
    string action;

    switch (httpException.GetHttpCode()) {
      case 404:
        // page not found
        action = "HttpError404";
        break;
      case 500:
        // server error
        action = "HttpError500";
        break;
      default:
        action = "General";
        break;
      }

      // clear error on server
      Server.ClearError();

      Response.Redirect(String.Format("~/Error/{0}/?message={1}", action, exception.Message));
    }

Sonra kumandanızı istediğiniz her şeyi alacaksınız:

// GET: /Error/HttpError404
public ActionResult HttpError404(string message) {
   return View("SomeView", message);
}

Senin yaklaşımında bazı artıları ve eksileri vardır. Hata işleme bu tür bir döngü içinde çok çok dikkatli olun. ASP.NET boru hattı ile 404, tüm nesne oturumu yaratacak bir kolu olduğundan bu hit bu başka bir şey. Bu bir sorun (performans) yoğun olarak kullanılan sistemler için olabilir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Associated Press

    Associated P

    18 EYLÜL 2006
  • FrameCityJackal

    FrameCityJac

    4 Aralık 2010
  • Mark Brown

    Mark Brown

    9 HAZİRAN 2010