404 page not found error for an ASP.NET MVC application

Hi Guys

This must be simple and already answered, but I've wasted many hours on it. I can't figure how to get an error page on mistyped address. Also I'd prefer not to redirect, but to keep the URL. I've tried many combinations of CustomErrors, HttpErrors and Application_Error, but nothing works for non-existent controller - depending on HttpErrors I always get IIS 404.0 page or just an empty 404 response. Running on IIS 7.5, MVC 3.
Last updated:11/10/2014 12:51:54 AM

1 Answers

David Miller
David Miller

I don't remember where I got the solution. But here is the code to handle the error: First, you create a ErrorController:

public class ErrorController : Controller
{
    //
    // GET: /Error/
    public ActionResult Index()
    {
        return RedirectToAction('Index', 'Home');
    }
 
    public ActionResult Generic()
    {
        Exception ex = null;
        try
        {
            ex = (Exception)HttpContext.Application[Request.UserHostAddress.ToString()];
        }
        catch { }
 
        return View();
    }
 
    public ActionResult Error404()
    {           
        return View();
    }
}

Second, open Global file and add the following code:

protected void Application_Error(object sender, EventArgs e)
{
     Exception ex = Server.GetLastError();
     Application[HttpContext.Current.Request.UserHostAddress.ToString()] = ex;
}

Third, change customerror in your webconfig:

<customErrors mode='Off' defaultRedirect='/Error/Generic'>
  <error statusCode='404' redirect='/Error/Error404'/>
</customErrors>

More: I created one more error layout. It makes things even more clear. :) 

Answer