使用Common.Logging 1.2实现Logging(二)ASP.NET MVC、Filter

ASP.NET MVC Filter

 action filter作为一个可以应用到controller action(或者是整个controller)上的属性(Attribute),改变action执行的行为。

Asp.Net MVC提供了以下几种默认的Filter

Filter Type

实现接口

执行时间

Default Implementation

Authorization filter

IAuthorizationFilter

在所有FilterAction执行之前执行

AuthorizeAttribute

Action filter

IActionFilter

分别在Action执行之前和之后执行。

ActionFilterAttribute

Result filter

IResultFilter

分别在Action Result执行之后和之前

ResultFilterAttribute

Exception filter

IExceptionFilter

只有在filter,

或者 action method, 或者 action result 抛出一个异常时候执行

 

HandleErrorAttribute

 你同时可以创建自己的action filter,比如说要实现一个自定义的验证系统,那么可能需要创建一个自定义的action filter,或者说当你需要改变controller action返回的view data的时候,也可以通过创建自定义action filter实现。

 

Action Filter

为了让用户更简单的创建一个自定义action filter,ASP.NET MVC Framework提供了一个基类ActionFilterAttribute,这个类实现了IActionFilter和IResultFilter接口,并且继承了Filter类。

这里的术语并不完全一致,从技术上说,这个类继承ActionFitlerAttribute,并且同时实现了action filter和result filter接口,但是从宽松意义上说,在ASP.NET MVC Framework中,任何实现filter的类型都是action filter。

ActionFilterAttribute类有以下的方法可以重写:

•OnActionExecuting – 在controller action执行之前调用
•OnActionExecuted – 在controller action执行之后调用
•OnResultExecuting – 在controller action result执行之前调用
•OnResultExecuted – 在controller action result执行之后调用

Authorization filter

Result filter

Exception filter


 

 

MVCQuick的ExceptionFilter

使用“使用Common.Logging 1.2实现Logging(一)”的Logging框架

实现代码

复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MVCQuick.Framework.Logging;

namespace MVCQuick.Framework.Mvc
{
public class HandleErrorLogAttribute : FilterAttribute, IExceptionFilter
{
public void OnException(ExceptionContext filterContext)
{
Logger logger = Logger.GetLogger(filterContext.Controller.GetType());

logger.Error(filterContext.Exception);

filterContext.Controller.ViewData["Error"] = filterContext.Exception;
filterContext.Result = new ViewResult()
{
ViewName = "Error",
ViewData = filterContext.Controller.ViewData,
};

filterContext.ExceptionHandled = true;
}

}
}
复制代码

使用方法

在Global.asax.cs类Application_Start()中初始化Logging

Logger.ConfigureLog4Net(HttpContext.Current.Server.MapPath("~/log"), LogLevel.Info, LogLevel.Info);

替换HandleErrorAttributeHandleErrorLogAttribute

 public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorLogAttribute());
}

 

源代码下载:http://mvcquick.codeplex.com/  

posted @   GuYoung  阅读(1664)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
点击右上角即可分享
微信分享提示