SORU
7 Mart 2011, PAZARTESİ


Özel asp.net MVC3 hata sayfaları

MVC3 temel bir web sitesi geliştiriyorum ve hata her türlü hata ve Render özel Görünümler işleme için bir çözüm arıyorum. Hele, bu bir "Hata" Kumanda nerede onun ana eylem "Dizin" (genel hata sayfası) ve bu denetleyici olacak bir kaç eylemleri için hatalar görünebilir kullanıcı gibi "Handle500" veya "HandleActionNotFound".

Web sitesinde meydana gelebilecek her hata bu "Hata" (örnek: "" veya "Eylem" değil, 500, 404, dbException, vb. Denetleyici Denetleyici tarafından ele olabilir

Site Haritası dosyası web sitesi yolları (ve yol) tanımlamak için kullanıyorum.

Bu soruya zaten cevap oldu, bu Gweebz bir yanıt

Son applicaiton_error benim yöntem şudur:

protected void Application_Error() {
//while my project is running in debug mode
if (HttpContext.Current.IsDebuggingEnabled && WebConfigurationManager.AppSettings["EnableCustomErrorPage"].Equals("false"))
{
    Log.Logger.Error("unhandled exception: ", Server.GetLastError());
}
else
{
    try
    {
        var exception = Server.GetLastError();

        Log.Logger.Error("unhandled exception: ", exception);

        Response.Clear();
        Server.ClearError();
        var routeData = new RouteData();
        routeData.Values["controller"] = "Errors";
        routeData.Values["action"] = "General";
        routeData.Values["exception"] = exception;

        IController errorsController = new ErrorsController();
        var rc = new RequestContext(new HttpContextWrapper(Context), routeData);
        errorsController.Execute(rc);
    }
    catch (Exception e)
    {
        //if Error controller failed for same reason, we will display static HTML error page
        Log.Logger.Fatal("failed to display error page, fallback to HTML error: ", e);
        Response.TransmitFile("~/error.html");
    }
}
}

CEVAP
8 Mart 2011, Salı


İşte özel hataları nasıl ele aldığım bir örnek. Ben eylemleri farklı HTTP hataları işleme ErrorsController tanımlayın:

public class ErrorsController : Controller
{
    public ActionResult General(Exception exception)
    {
        return Content("General failure", "text/plain");
    }

    public ActionResult Http404()
    {
        return Content("Not found", "text/plain");
    }

    public ActionResult Http403()
    {
        return Content("Forbidden", "text/plain");
    }
}

ve sonra Global.asax Application_Error için üye oldum ve bu denetleyici çağırmak:

protected void Application_Error()
{
    var exception = Server.GetLastError();
    var httpException = exception as HttpException;
    Response.Clear();
    Server.ClearError();
    var routeData = new RouteData();
    routeData.Values["controller"] = "Errors";
    routeData.Values["action"] = "General";
    routeData.Values["exception"] = exception;
    Response.StatusCode = 500;
    if (httpException != null)
    {
        Response.StatusCode = httpException.GetHttpCode();
        switch (Response.StatusCode)
        {
            case 403:
                routeData.Values["action"] = "Http403";
                break;
            case 404:
                routeData.Values["action"] = "Http404";
                break;
        }
    }

    IController errorsController = new ErrorsController();
    var rc = new RequestContext(new HttpContextWrapper(Context), routeData);
    errorsController.Execute(rc);
}

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 10 Daughters, 2 Sons

    10 Daughters

    10 Mart 2009
  • Michael Neal

    Michael Neal

    2 Mayıs 2009
  • sknbp

    sknbp

    16 Kasım 2006