Home  >  Article  >  Backend Development  >  Related handling of MVC exceptions

Related handling of MVC exceptions

巴扎黑
巴扎黑Original
2017-08-08 13:18:151743browse

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();
    }
  }

Run it and let’s take a look at the result .

The above is the result of the operation. We can see that the System.Web.Mvc.HandleErrorInfo class still has many rich attributes, which we can use directly.

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 below


namespace Exception.Controllers
{
  public class SharedController : Controller
  {
    // GET: Shares
    public ActionResult Error()
    {
      return View();
    }

    public ActionResult NotFondError()
    {
      return View();
    }
  }
}

page:

Then we write a wrong address in the browser address and take a look at the result :

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;//错误内容
      //=============================
      //将错误记录到日志中
      //=============================
    }
  }

Then, add FilterConfig.cs:


public class FilterConfig
  {
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
      filters.Add(new HandleErrorAttribute());
      filters.Add(new CustomHandleErrorAttribute());
    }
  }

In this way, we can complete our needs .

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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn