zoukankan      html  css  js  c++  java
  • 说一说MVC的过滤器(一)

     在MVC项目中过滤器,最好把这些过滤器类放到一个文件夹中(Filters),然后过滤器文件的名称也是有规定的,格式应该为xxxAttribute,否则在控制器或控制器的方法中是无法进行调用过滤器的,在过滤器中需要继承FilterAttribute类,并且实现IActionFilter以及IResultFilter接口,这两个接口中实现的方法分别是OnActionExecuted,OnActionExecuting与OnResultExecuted,
    OnResultExecuting,前两个方法负责在相应开始和相应结束,而后两个方法负责结果发送开始以及结果发送结束,它们的执行顺序是:OnActionExecuting => OnActionExecuted => OnResultExecuting =>OnResultExecuted.在控制器添加过滤器标记时,过滤器的名字应该是[IsLogin],不需要带attribute,因为它是一种规范。
    现在搞一个案例,获取上下文的放到数据库,表格式:
    create table Log(
    content varchar(50) parmary key,
    logtime datetime2)
    我们在要在页面进行响应的时候进行记录日志,所以我们应在OnActionExecuted中进行操作代码如下:
    public class MyLoginAttribute : FilterAttribute, IActionFilter, IResultFilter
    {
    BookShopEntities book = new BookShopEntities();
    public void OnActionExecuted(ActionExecutedContext filterContext)
    {
    // filterContext.HttpContext.Response.Write("OnActionExecuted");
    string cname = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;//控制器的名称
    string bname = filterContext.ActionDescriptor.ActionName;//方法名称
    string aname = filterContext.HttpContext.Request.HttpMethod;//请求方式
    book.MSysLogs.Add(new MSysLog()
    {
    logtime = DateTime.Now,
    content = $"通过了{aname}方式调用了{cname}控制器{bname}方法"
    });
    book.SaveChanges();
    }
    }

    写这篇文章时候入的坑:我的表中没有主键,所以创建EF或者更新EF的时候没有这个表.... 
  • 相关阅读:
    理解 RESTful:理论与最佳实践
    Shiro 性能优化:解决 Session 频繁读写问题
    单点登录的三种实现方式
    理解 Spring(二):AOP 的概念与实现原理
    理解 Spring(一):Spring 与 IoC
    MFC查内存泄漏方法
    024 --- 第28章 访问者模式
    023 --- 第27章 解释器模式
    022 --- 第26章 享元模式
    021 --- 第25章 中介者模式
  • 原文地址:https://www.cnblogs.com/ZaraNet/p/9519328.html
Copyright © 2011-2022 走看看