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
- 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.
- 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.
<!-- Custom Error Handling -->
<customErrors mode="On" defaultRedirect="~/Home/DefaultError">
<error statusCode="404" redirect="~/Home/Error404" />
</customErrors>
Example
of Controller level handling
[HandleError] public class HomeController : Controller { public ActionResult Index() { ViewData["Message"] = "Welcome to ASP.NET MVC!"; return View(); } public ActionResult About() { return View(); } }
- 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
public
class
FilterConfig
{
public
static
void
RegisterGlobalFilters(GlobalFilterCollection
filters)
{
filters.Add(new
HandleErrorAttribute());
}
}
- When error occurs, this will redirect to a view which is in shared folder named 'Error'
- You can change view name. ex. [HandleError(View = "DatabaseError")]
- That's all
- Redirection sequence of error handling
- For ( 500 Internal server error)
- Redirect to view of Handle Error Attribute
- 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)
- Other url according to status code defined in customErrors tag.
Note:
- 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.
- To handle ajax request's exception. Visit the link given below.
- For more detail about exception. Visit this link :