排名
1
文章
860
粉丝
112
评论
163
.net core自定义项目模板,创建自己的模板项目,使用命令行创建模板项目
尘叶心繁 : 可以可以讲真的我都想弄个模板
net core webapi post传递参数
庸人 :
确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
.net webapi 返回需要的字段,忽略某些字段,修改字段名等
雨雨雨雨雨辰 : 已精
.net webapi 返回需要的字段,忽略某些字段,修改字段名等
雨雨雨雨雨辰 :
疯狂反射
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术

过滤器简介:
面向切面的编程方式
可以实现不改动原有逻辑的基础上添加自己的逻辑
使用的时候添加一个配置即可,不想用的时候取消配置就行
过滤器作用范围:
1:全局过滤器
FilterConfig里边去添加一条
2:控制器级别
使用特性方式加入控制器上面
3: action级别
使用特性方式加入Action上面
过滤器分类:
IActionFilter:action执行之前和执行之后进入该过滤器
IResultFilter:页面返回之前和页面返回之后
IAuthorizationFilter:用来做权限相关,针对性更强一点
IExceptionFilter:全局异常处理
注意:控制器本身就是一个过滤器,而且是具有一个多种类型的过滤器
我们看控制器实现的接口就知道了
时间有限,下面来几个常用过滤器的简单小例子:
权限过滤器:
- public class LoginAuthorFilter : AuthorizeAttribute
- {
- /// <summary>
- /// 验证是否有权限
- /// 返回false表示验证失败,就是执行HandleUnauthorizedRequest
- /// </summary>
- /// <param name="httpContext"></param>
- /// <returns></returns>
- protected override bool AuthorizeCore(HttpContextBase httpContext)
- {
- UserInfoModel userInfoModel = httpContext.Session["userInfo"] as UserInfoModel;
-
- if (userInfoModel == null)
- return false;
- else
- return true;
- }
-
- /// <summary>
- /// 没有权限的时候执行
- /// </summary>
- /// <param name="filterContext"></param>
- protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
- {
- filterContext.Result = new RedirectResult("/login/index");
- }
- }
配置过滤器可以使用AllowAnonymous特性来忽略模某些控制器或者action不进行权限验证
异常处理过滤器:
当系统出现异常时执行
- public class ExceptionFilter : IExceptionFilter
- {
- public void OnException(ExceptionContext filterContext)
- {
- //获取错误信息
- string errorMsg = filterContext.Exception.Message;
- //错误页面
- string url = filterContext.HttpContext.Request.RawUrl;
- //表示异常信息已经被处理
- filterContext.ExceptionHandled = true;
- using (FileStream file = new FileStream(filterContext.HttpContext.Server.MapPath("~/log/"+DateTime.Now.ToShortDateString().Replace("/","-")+"errolog.txt"), FileMode.Append))
- {
- using (StreamWriter writer = new StreamWriter(file))
- {
- writer.WriteLine("错误信息:" + errorMsg);
- writer.WriteLine("错误时间:" + DateTime.Now);
- writer.WriteLine("错误页面:" + url);
- writer.WriteLine("请求方式:" + filterContext.HttpContext.Request.RequestType);
- writer.WriteLine("IP地址:" + filterContext.HttpContext.Request.UserHostAddress);
- writer.WriteLine("浏览器信息:" + filterContext.HttpContext.Request.UserAgent);
- writer.WriteLine("------------------------------------------------------------");
- }
- }
- filterContext.Result = new RedirectResult("/Common/ErrorPage");
- }
- }
Action过滤器:
- public class IsLoginFilter : FilterAttribute, IActionFilter
- {
- public bool isuse = true;
- public void OnActionExecuted(ActionExecutedContext filterContext)
- {
-
- }
-
- public void OnActionExecuting(ActionExecutingContext filterContext)
- {
- //需要放行的
- if (isuse == false)
- return;
-
- UserInfoModel userInfoModel = filterContext.HttpContext.Session["userInfo"] as UserInfoModel;
- string rawUrl = filterContext.HttpContext.Request.RawUrl;
-
- //获取控制的名字
- string controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
- //获取action的名字
- string actionName = filterContext.ActionDescriptor.ActionName;
- if (userInfoModel == null)
- {
- //通过指定返回值跳转
- filterContext.Result = new RedirectResult("/login/index");
- }
- }
- }
过滤器的优先级:
IAuthorizationFilter-->IActionFilter-->IResultFilter
同级的时候可以通过order改变过滤器优先级,数值越小越先执行
第二个参数就是优先级了
显示一个action的所有过滤器:
后台
- public ActionResult Index(string errorInfo)
- {
- //输出某个作用在action的所有过滤器
- ReflectedControllerDescriptor rcd = new ReflectedControllerDescriptor(typeof(LoginController));
- ActionDescriptor action = rcd.FindAction(ControllerContext, "index");
- IEnumerable<System.Web.Mvc.Filter> filters = FilterProviders.Providers.GetFilters(ControllerContext, action);
- ViewBag.info = errorInfo;
- return View(filters);
- }
前台
- @using System.Web.Mvc
- @model IEnumerable<Filter>
- <table>
- <tr>
- <td>过滤器</td>
- <td>优先级</td>
- <td>作用域</td>
- </tr>
- @foreach (Filter item in Model)
- {
- <tr>
- <td>@item.Instance</td>
- <td>@item.Order</td>
- <td>@item.Scope</td>
- </tr>
- }
- </table>
效果:
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)
评价