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的时候没有这个表.... 
  • 相关阅读:
    数据结构学习(十二)、归并排序
    数据结构学习(十一)、堆排序
    数据结构学习(十)、插入排序
    数据结构学习(九)、简单选择排序
    数据结构学习(八)、冒泡排序
    天梯赛 L3-013 非常弹的球 找规律
    codeup模拟赛 进击的二叉查找数
    POJ 2828 Buy Tickets 线段树 倒序插入 节点空位预留(思路巧妙)
    HDU 1394 逆序数 线段树单点跟新 | 暴力
    HDU 2795 Billboard 线段树,区间最大值,单点更新
  • 原文地址:https://www.cnblogs.com/ZaraNet/p/9519328.html
Copyright © 2011-2022 走看看