This article mainly introduces the relevant information of MVC exception handling in detail, which has certain reference value. Interested friends can refer to it
In daily development, we will capture many To handle exceptions, usually our method is to add try catch blocks where exception handling is required. However, if there are many places where exception handling is required, try catch blocks will be written frequently. For us For programmers who are naturally 'lazy', they always want to find a shortcut. Therefore, there will be global exception handling. So, today, we will take a look at how to perform global exception handling in MVC.
1. MVC framework’s own global exception handling
In MVC, the framework has given us a set of global exception handling feature classes, the HandleErrorAttribute class. We can find this line of code in the FilterConfig.cs file in the App_Start folder in MVC
public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); }
This is to instantiate a HandleErrorAttribute class and put it in the filter. Then there is an Error.cshtml page in our Views>Shared folder. The Model type in this page is System.Web.Mvc.HandleErrorInfo. This has been written for me by the MVC framework. We can directly Use it.
In the Error.cshtml page, we can do further processing to display error information and display error information according to needs. These error messages will be found in certain properties in the System.Web.Mvc.HandleErrorInfo class.
For example: Here is Error.cshtml.
We deliberately write an exception in Control:
##
public class HomeController : Controller { public ActionResult Index() { string i = "12a"; int j = Convert.ToInt32(i); return View(); } }
The exception handling that comes with MVC defaults to handling exceptions with error codes in the 500 series. If it is 404, this will not be done. However, we can handle it through the settings of the Web.config file. See how we handle it.
First, we complete the Error.cshtml page, add a Control to it, and then write a View and Control specifically to handle 404. As shown belownamespace Exception.Controllers { public class SharedController : Controller { // GET: Shares public ActionResult Error() { return View(); } public ActionResult NotFondError() { return View(); } } }
2. Rewrite exception handling in MVC
In development, we often have such a requirement, we need Record and save exceptions through text logs. Then MVC's own exception handling method System.Web.Mvc.HandleErrorInfo does not have such a function, so we rewrite it to make it have this function. Next, let's look at how to rewrite it. First we build a class, let this class inherit System.Web.Mvc.HandleErrorInfo, and then override the virtual method in System.Web.Mvc.HandleErrorInfo: OnException method.public class CustomHandleErrorAttribute : HandleErrorAttribute { public override void OnException(ExceptionContext filterContext) { base.OnException(filterContext); var err = filterContext.Exception.Message;//错误内容 //============================= //将错误记录到日志中 //============================= } }
public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); filters.Add(new CustomHandleErrorAttribute()); } }
The above is the detailed content of Related handling of MVC exceptions. For more information, please follow other related articles on the PHP Chinese website!