一、Core Mvc 拦截器
- 和
.net frameWork mvc中一样,首先需要继承重写实现框架定义的ExceptionFilterAttribute - 特性是在编译时确定,所以对于需要注入实例到特性中,需要由容器生成,使用
ServiceFilterAttribute并在ConfigureServices中添加
实现带注入的异常拦截器
//利用容器生成注入服务
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped(typeof(CustomExceptionFilterAttribute));
}
//实现拦截器
public class CustomExceptionFilterAttribute : ExceptionFilterAttribute
{
private HttpRequest httpRequest = null;
private readonly ILogger<CustomExceptionFilterAttribute> _logger;
//注入日志组件
public CustomExceptionFilterAttribute(ILogger<CustomExceptionFilterAttribute> logger)
{
this._logger = logger;
}
public override void OnException(ExceptionContext context)
{
this.httpRequest = context.HttpContext.Request;
if (!context.ExceptionHandled)
{
if (this.IsAjax)
{
context.Result = new JsonResult(new
{
Result = false,
msg = context.Exception.Message
}); ;
}
else
{
context.Result = new RedirectResult("/Home/Index");
}
context.ExceptionHandled = true;
}
}
private bool IsAjax
{
get
{
string header = this.httpRequest.Headers["X-Requested-With"];
return "XMLHttpRequest".Equals(header);
}
}
}
//由于拦截器需要注入日志服务,不能直接传引用类型,所以需要使用ServiceFilterAttribute利用容器生成
[ServiceFilterAttribute(typeof(CustomExceptionFilterAttribute))]
public IActionResult Index(){}
本文介绍了如何在.NET Core MVC中实现自定义异常过滤器,并通过依赖注入注入日志服务。重点讲解了如何使用ServiceFilterAttribute生成实例并配置到控制器中。
332

被折叠的 条评论
为什么被折叠?



