加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

聊一聊Asp.net过滤器Filter那一些事

发布时间:2020-06-16 23:18:01 所属栏目:编程 来源:站长网
导读:副问题#e# 最近在清算优化.net代码时,发明几个很不友爱的处理赏罚征象:登录判定、权限认证、日记记录、非常处理赏罚等通用操纵,在项目中的action中处处都是。在代码优化上,这一点是很重要出力点。这时.net中的过滤器、拦截器(Filter)就派上用场了。此刻按照这

OnException尚有一个很重要的处理赏罚,那就是对非常功效的同一包装,返回一个很友爱的功效给用户,停止把一些不须要的信息返回给用户。好比:针对MVC,那么跟进差异非常,同一调解至友爱的提醒页面等等;针对API,那么我们可以一个同一的返回几个封装,便于用户同一处理赏罚功效。

MVC 的非常处理赏罚实例代码:

/// <summary> /// MVC自界说非常处理赏罚机制 /// 说道非常处理赏罚,着实我们脑海中的第一回响,也该是try/cache操纵 /// 可是在现实开拓中,很有也许地点错误基础就进入不到try中,又可能没有被try处理赏罚到非常 /// 该类就施展了浸染,可以或许很好的未经捕捉的非常,并做响应的逻辑处理赏罚 /// 自界说非常机制,首要集成HandleErrorAttribute 重写其OnException要领 /// </summary> public class XYHMVCHandleError : HandleErrorAttribute { /// <summary> /// 处理赏罚非常 /// </summary> /// <param>非常上下文</param> public override void OnException(ExceptionContext filterContext) { // 我们在平常的项目中,非常处理赏罚一样平常有两个浸染 // 1:记录非常的具体日记,便于过后阐嫡志 // 2:对非常的同一友甜头理赏罚,好比按照非常范例重定向到友爱提醒页面 // 在这内里既能获取到未经处理赏罚的非常信息,也能获取到哀求信息 // 在此可以按照现实项目必要做响应的逻辑处理赏罚 // 下面简朴的罗列了几个要害信息获取方法 // 节制器名称 留意,这样获取出来的是一个文件的全路径 string contropath = filterContext.Controller.ToString(); // 会见目次的相对路径 string filePath = filterContext.HttpContext.Request.FilePath; // url完备地点 string url = (filterContext.HttpContext.Request.Url.AbsoluteUri).ExUrlDeCode(); // 哀求方法 post get string httpMethod = filterContext.HttpContext.Request.HttpMethod; // 哀求IP地点 string ip = filterContext.HttpContext.Request.GetIPAddress(); // 获取所有的哀求参数 HttpRequest httpRequest = HttpContext.Current.Request; Dictionary<string, string> queryParameters = httpRequest.GetAllQueryParameters(); // 获取非常工具 Exception ex = filterContext.Exception; // 非常描写信息 string exMessage = ex.Message; // 非常仓库信息 string stackTrace = ex.StackTrace; // 按照现实环境记录日记(文今日记、数据库日记,提议详细步调回收异步方法来完成) filterContext.ExceptionHandled = true; // 模仿按照差异的做对应的逻辑处理赏罚 int statusCode = filterContext.HttpContext.Response.StatusCode; if (statusCode>=400 && statusCode<500) { filterContext.Result = new RedirectResult("/html/404.html"); } else { filterContext.Result = new RedirectResult("/html/500.html"); } } }

API 的非常处理赏罚实例代码:

/// <summary> /// API自界说非常处理赏罚机制 /// 说道非常处理赏罚,着实我们脑海中的第一回响,也该是try/cache操纵 /// 可是在现实开拓中,很有也许地点错误基础就进入不到try中,又可能没有被try处理赏罚到非常 /// 该类就施展了浸染,可以或许很好的未经捕捉的非常,并做响应的逻辑处理赏罚 /// 自界说非常机制,首要集成ExceptionFilterAttribute 重写其OnException要领 /// </summary> public class XYHAPIHandleError : ExceptionFilterAttribute { /// <summary> /// 处理赏罚非常 /// </summary> /// <param>非常上下文</param> public override void OnException(HttpActionExecutedContext actionExecutedContext) { // 我们在平常的项目中,非常处理赏罚一样平常有两个浸染 // 1:记录非常的具体日记,便于过后阐嫡志 // 2:对非常的同一友甜头理赏罚,好比按照非常范例重定向到友爱提醒页面 // 在这内里既能获取到未经处理赏罚的非常信息,也能获取到哀求信息 // 在此可以按照现实项目必要做响应的逻辑处理赏罚 // 下面简朴的罗列了几个要害信息获取方法 // action名称 string actionName = actionExecutedContext.ActionContext.ActionDescriptor.ActionName; // 节制器名称 string controllerName =actionExecutedContext.ActionContext.ControllerContext.ControllerDescriptor.ControllerName; // url完备地点 string url = (actionExecutedContext.Request.RequestUri.AbsoluteUri).ExUrlDeCode(); // 哀求方法 post get string httpMethod = actionExecutedContext.Request.Method.Method; // 哀求IP地点 string ip = actionExecutedContext.Request.GetIPAddress(); // 获取所有的哀求参数 HttpRequest httpRequest = HttpContext.Current.Request; Dictionary<string, string> queryParameters = httpRequest.GetAllQueryParameters(); // 获取非常工具 Exception ex = actionExecutedContext.Exception; // 非常描写信息 string exMessage = ex.Message; // 非常仓库信息 string stackTrace = ex.StackTrace; // 按照现实环境记录日记(文今日记、数据库日记,提议详细步调回收异步方法来完成) // 本身的记录日记落地逻辑略 ...... // 构建同一的内部非常处理赏罚机制,相等于对非常做一层同一包装袒露 MBaseResult<string> result = new MBaseResult<string>() { Code = MResultCodeEnum.systemErrorCode, Message = MResultCodeEnum.systemError }; actionExecutedContext.Response = new HttpResponseMessage(HttpStatusCode.OK); //必要本身指定输出内容和范例 HttpContext.Current.Response.ContentType = "text/html;charset=utf-8"; HttpContext.Current.Response.Write(JsonConvert.SerializeObject(result)); HttpContext.Current.Response.End(); // 此处竣事相应,就不会走路由体系 } }

总结

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读