Routing in MVC - Front- & Back-End Development - Front- & Back-End Development - Progress Community
 Front- & Back-End Development

Routing in MVC

  • Routing in MVC
  • Hi all, 

    I'm trying to do something with unhandled exceptions.

    For some reason, it is very hard to show an error page if an unhandled exception occurs. I found a way to redirect 404, 403 etc. using an ErrorController. A 500 exception however always shows inside the active MVC view.

    What works is something like this (simplified code): 

    try
       return View("Index", model);
    catch (Exception)
       return RedirectToRoute(ErrorControllerRoute.GetInternalServerError);

    This RedirectToRoute will redirect to:

    I wanted to do something like this in the OnException override of my BaseController class like this:

    protected override void OnException(ExceptionContext filterContext)
       filterContext.Result = RedirectToRoute(ErrorControllerRoute.GetInternalServerError);
       base.OnException(filterContext);

    However, that is not working. The URL it generates in this case is:

    So, it looks like the ErrorController class is ignored.

    Any idea how this works within Sitefinity?

  • Hello Daniel,

    You can redirect to a controller route the following way:
    filterContext.Result = new RedirectToRouteResult(new
                       RouteValueDictionary(new controller = "Controller", action = "Error"));

    If you want to show a view for the error, you can use the following:
    public override void OnException(ExceptionContext filterContext)
            
                Exception ex = filterContext.Exception;
                Log.Write(ex, ConfigurationPolicy.ErrorLog);
     
                if (!string.IsNullOrEmpty(this.View))
                
                    this.View = HandleErrorAttributeCustom.defaultErrorView;
                
     
                base.OnException(filterContext);
            

    @model HandleErrorInfo
     
    <h1>Error</h1>
     
    <p>@Model.Exception.ToString()</p>

    which you can also place in a attribute inheriting from HandleErrorAttribute.

    Hope the above helps.

    Regards,
    Nikola Zagorchev
    Telerik
     
    Do you want to have your say in the Sitefinity development roadmap? Do you want to know when a feature you requested is added or when a bug fixed? Explore the Telerik Sitefinity CMS Ideas&Feedback Portal and vote to affect the priority of the items