Wednesday, 11 December 2013

Exception Handling in ASP.NET MVC 4

    What does the user see when a runtime error occurs in an ASP.NET web application? The answer depends on how the website's <customErrors> configuration. By default, users are shown an unsightly yellow screen proclaiming that a runtime error has occurred. This tutorial shows how to customize settings to handle runtime exceptions.

We will use two attributes to handle error in an MVC application
  • customErrors attribute defined in web.config
  • HandleError attribute comes with default MVC Application
  1. Set custom errors mode to ON in web config.
    • From custom error we can set that where we can redirect a user when some exception occurs in our application.
    • Set defaultRedirect attribute'value & add a sub tag for 404 error. Values for defaultRediret and redirect are the URLs of the pages for default redirection when some error occurs.

      <!-- Custom Error Handling -->
      <customErrors mode="On" defaultRedirect="~/Home/DefaultError">
      <error statusCode="404" redirect="~/Home/Error404" />

  2. Use HandleError filter attribute

    • The HandleError filter works only if the <customErrors> section is turned on in web.config.
    • HandleError attribute provided by MVC framework.
    • It handle only status code 500 errors. It does not handle 404 not found or other types of errors.
    • If you use both customError attribute in web.config & HandleError attribute and any internal server error (500) occurs then HandleError will override behaviour of customError attribute & will handle error with it's own way.
    Example of Controller level handling
public class HomeController : Controller
    public ActionResult Index()
        ViewData["Message"] = "Welcome to ASP.NET MVC!";

        return View();

    public ActionResult About()
        return View();

  1. You can use HandleError attribute at
    • Action Level – by adding this attribute on Action ex. [HandleError]
    • Controller Level - by adding this attribute on Controller ex. [HandleError]
    • Application Level - by registering filter in FilterConfig.cs in App_Start folder
Example of Application level handling
     public class FilterConfig
     public static void RegisterGlobalFilters(GlobalFilterCollection filters)
     filters.Add(new HandleErrorAttribute());
  1. When error occurs, this will redirect to a view which is in shared folder named 'Error'
  2. You can change view name. ex. [HandleError(View = "DatabaseError")]
  3. That's all
  4. Redirection sequence of error handling
    • For ( 500 Internal server error)
      1. Redirect to view of Handle Error Attribute
      2. Redirect to Url defaultRedirect defined in customErrors tag in web.config. ( if Handle Error is not registered at any level)
    • For ( 404 or other types of errors)
      1. Other url according to status code defined in customErrors tag.

  1. Handle Error is an inbuilt Filter. We can use our own custom filter attribute by making a class which is derived from Filter Attribute & implements Iexception Filter interface.
  2. To handle ajax request's exception. Visit the link given below.
  3. For more detail about exception. Visit this link :

No comments:

Post a Comment