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的时候没有这个表.... 
  • 相关阅读:
    选项卡自动切换(定时器demo)
    JS基础——选项卡套选项卡(函数传参)
    JS基础——修改文本框的值(函数传参)
    JS基础——选项卡列表显示隐藏缩略图(函数传参)
    js基础——图片切换实例(函数传参)
    JS 获取元素的属性值,非内联样式
    css position 定位
    ie6-7 overflow:hidden失效问题的解决方法
    Vue自带的过滤器
    Vue数据绑定
  • 原文地址:https://www.cnblogs.com/ZaraNet/p/9519328.html
Copyright © 2011-2022 走看看