全局错误登录ASP.Net MVC 6
我正在测试一个MVC 6 Web Api,并希望实现登录到一个全局错误处理程序.只要保证没有错误就会退出系统而不记录.我创建了一个ExceptionFilterAttribute,并在启动时将其全局添加:
public class AppExceptionFilterAttribute : ExceptionFilterAttribute { public override void OnException(ExceptionContext context) { //Notice pulling from HttpContext Application Svcs -- don't like that var loggerFactory = (ILoggerFactory)context.HttpContext.ApplicationServices.GetService(typeof (ILoggerFactory)); var logger = loggerFactory.Create("MyWeb.Web.Api"); logger.WriteError(2,"Error Occurred",context.Exception); context.Result = new JsonResult( new { context.Exception.Message,context.Exception.StackTrace }); } } 现在在启动时,我添加了这个过滤器: services.Configure<MvcOptions>(options => { options.Filters.Add(new AppExceptionFilterAttribute()); }); 这一切似乎是一种暴力…有更好的方式来到这里使用MVC 6? 我不喜欢的东西,或者不了解这种方法: >不喜欢从http上下文拉DI 我可以想到的另一个选择是拥有一个基本控制器,它接受所有控制器继承的ILoggerFactory. 想知道是否有某种诊断中间件允??许插入日志记录? 解决方法
你的问题有2部分. 1)DI可注射过滤器2)全局错误处理.
关于#1:您可以使用ServiceFilterAttribute用于此目的. //Modify your filter to be like this to get the logger factory DI injectable. public class AppExceptionFilterAttribute : ExceptionFilterAttribute { private readonly ILogger _logger; public AppExceptionFilterAttribute(ILoggerFactory loggerfactory) { _logger = loggerFactory.CreateLogger<AppExceptionFilterAttribute>(); } public override void OnException(ExceptionContext context) { //... } } //Register your filter as a service (Note this filter need not be an attribute as such) services.AddTransient<AppExceptionFilterAttribute>(); //On the controller/action where you want to apply this filter,//decorate them like [ServiceFilter(typeof(AppExceptionFilterAttribute))] public class HomeController : Controller { .... } 您应该能够从传递的ExceptionContext获取控制器的详细信息. 关于#2:从你以前的帖子看起来像是在使用ExceptionHandlerMiddleware(source& extension source)…如何使用它?…有关的一些信息: >这个中间件是通用的,适用于任何中间件在它之后注册了所有任何概念,如控制器/动作信息是特定于MVC的,该中间件不会知道.>这个中间件不处理格式化程序写入异常.你可以编写自己的缓冲中间件,您可以在其中修改响应身体成为缓冲流(MemoryStream)并让MVC层写回应.在格式化程序写入异常的情况下,您可以抓住它并发送一个500错误响应与细节. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 用于网页的SQL Reporting Services查看器 – 您
- asp.net – 缓存是客户端还是服务器端?
- asp.net-mvc – 无法更改关系,因为一个或多个外键属性在MVC
- Asp.Net动态数据的未来
- asp.net-mvc – 如何将html5属性和值导入mvc HiddenFor
- 跨ASP.NET网站共享CSS,JS,图像,母版页等
- 如何使用ASP.NET MVC4 Razor项目中的web.config文件中的值更
- asp.net – 我可以隐藏/显示asp:菜单项基于角色吗?
- asp.net – 如何在Gridview中绑定DropDownList,而不是从gri
- asp.net-mvc – 在Owin Identity和Asp.Net MVC中正确使用声
- asp.net-mvc – 根据服务器部署32或64位ELMAH与网
- asp.net-mvc – 如何锁定一个asp.net mvc动作?
- asp.net-mvc – 当您使用带有淘汰赛的JS视图模型
- ASP.NET MVC正则表达式路由约束
- asp.net-mvc-3 – 部署ASP.NET MVC应用程序时IIS
- asp.net-mvc-4 – DataAnnotation的必需属性
- ASP.NET MVC:访问日志
- 如何在asp.net mvc项目中使用Material-UI
- asp.net – 使用app_offline.htm使应用程序脱机,
- asp.net-mvc – 在ASP.NET MVC中创建控件外的Vie