.Net Core中使用ExceptionFilter過濾器的方法
.Net Core中有各種Filter,分別是AuthorizationFilter、ResourceFilter、ExceptionFilter、ActionFilter、ResultFilter??梢园阉麄兛醋魇?Net Core自帶的AOP的擴展封裝。
今天來看其中的一種:ExceptionFilter(用于全局的異常處理)
首先新建一個.Net Core MVC的項目
新建一個控制器:

這里我們可以看到代碼運行到16行時會報一個索引項超出集合范圍的錯誤
按照常規(guī)的思維我們在代碼中會加異常處理,如下:
try
{
var range = Enumerable.Range(1, 3).ToArray();
var result = range[4];
return View();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
但是每個方法都這樣加會不會覺得很煩?有沒有想過只寫一次就可以了
上代碼:

using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.AspNetCore.Mvc.ModelBinding;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace ExceptionFilter.Filter
{
public class CustomerExceptionFilter : Attribute, IExceptionFilter
{
private readonly IHostingEnvironment _hostingEnvironment;
private readonly IModelMetadataProvider _modelMetadataProvider;
public CustomerExceptionFilter(IHostingEnvironment hostingEnvironment,
IModelMetadataProvider modelMetadataProvider)
{
_hostingEnvironment = hostingEnvironment;
_modelMetadataProvider = modelMetadataProvider;
}
/// <summary>
/// 發(fā)生異常進入
/// </summary>
/// <param name="context"></param>
public async void OnException(ExceptionContext context)
{
if (!context.ExceptionHandled)//如果異常沒有處理
{
if (_hostingEnvironment.IsDevelopment())//如果是開發(fā)環(huán)境
{
var result = new ViewResult { ViewName = "../Handle/Index" };
result.ViewData = new ViewDataDictionary(_modelMetadataProvider,
context.ModelState);
result.ViewData.Add("Exception", context.Exception);//傳遞數(shù)據(jù)
context.Result = result;
}
else
{
context.Result = new JsonResult(new
{
Result = false,
Code = 500,
Message = context.Exception.Message
});
}
context.ExceptionHandled = true;//異常已處理
}
}
}
}
我們在方法中先以特性來使用,加上這句代碼:
[TypeFilter(typeof(CustomerExceptionFilter))]

之后會跳到這個視圖:../Handle/Index ,會將異常信息傳入到此視圖
視圖頁代碼:
<p>Message:@ViewData["Exception"]</p>
(可以自行封裝。。。)
我們還可以定義成全局的
在Startup類中的ConfigureServices方法中加入這句代碼
services.AddControllersWithViews(option =>
{
option.Filters.Add<CustomerExceptionFilter>();
});
//3.0以下的版本好像應(yīng)該這樣寫:services.AddMvc();
到此這篇關(guān)于.Net Core中使用ExceptionFilter過濾器的方法的文章就介紹到這了,更多相關(guān).Net Core使用ExceptionFilter內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ASP.NET編程簡單實現(xiàn)生成靜態(tài)頁面的方法【附demo源碼下載】
這篇文章主要介紹了ASP.NET編程簡單實現(xiàn)生成靜態(tài)頁面的方法,較為詳細的分析了asp.net生成靜態(tài)頁面的步驟與相關(guān)操作技巧,并附帶相關(guān)實例源碼供讀者下載參考,需要的朋友可以參考下2017-07-07
Entity?Framework?Core實現(xiàn)Like查詢詳解
本文詳細講解了Entity?Framework?Core實現(xiàn)Like查詢的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-02-02
asp.net中TextBox只能輸入數(shù)字的最簡潔的兩種方法
這篇文章介紹了asp.net中TextBox只能輸入數(shù)字的最簡潔的兩種方法,有需要的朋友可以參考一下2013-11-11
Asp.Net 網(wǎng)站性能優(yōu)化之緩字決 (上) 緩沖寫數(shù)據(jù)
通常情況下Asp.Net 網(wǎng)站的底層數(shù)據(jù)存儲都是關(guān)系數(shù)據(jù)庫,關(guān)系數(shù)據(jù)庫資源比較昂貴,而且也很容易造成瓶頸。緩字決文章就是為大家介紹如何有效使用緩存,異步寫緩沖數(shù)據(jù)庫的壓力,從而保證網(wǎng)站的性能。2010-06-06

