过滤器 -- Filter

  1. ActionFilterAttribute:
    示例:实现一个日志记录过滤器,记录每个控制器动作方法的执行时间和参数信息。

    public class LogActionFilterAttribute : ActionFilterAttribute
    {public override void OnActionExecuting(ActionExecutingContext context){// 记录方法开始执行时间和参数信息context.HttpContext.Items["StartTime"] = DateTime.Now;LogParameters(context.ActionArguments);}public override void OnActionExecuted(ActionExecutedContext context){// 记录方法执行结束时间和耗时var startTime = (DateTime)context.HttpContext.Items["StartTime"];var duration = DateTime.Now - startTime;LogDuration(duration);}private void LogParameters(IDictionary<string, object> parameters){// 将参数信息记录到日志中foreach (var param in parameters){// 记录参数名称和值}}private void LogDuration(TimeSpan duration){// 将方法执行时间记录到日志中// 例如: "Method executed in {duration.TotalMilliseconds} ms."}
    }
    
  2. AuthorizeAttribute:
    示例:实现一个基于角色的授权过滤器,只允许具有特定角色的用户访问某个控制器动作方法。

    public class RoleAuthorizeAttribute : AuthorizeAttribute
    {private readonly string[] _allowedRoles;public RoleAuthorizeAttribute(params string[] allowedRoles){_allowedRoles = allowedRoles;}protected override bool AuthorizeCore(HttpContextBase httpContext){// 获取当前用户的角色信息var user = httpContext.User;if (user.Identity.IsAuthenticated){// 检查用户是否具有允许的角色return _allowedRoles.Any(role => user.IsInRole(role));}return false;}
    }
    
  3. ExceptionFilterAttribute:
    示例:实现一个全局异常处理过滤器,将所有未处理的异常记录到日志中,并返回友好的错误页面。

    public class GlobalExceptionFilter : ExceptionFilterAttribute
    {public override void OnException(ExceptionContext context){// 记录异常信息到日志中LogException(context.Exception);// 设置响应状态码为500 Internal Server Errorcontext.HttpContext.Response.StatusCode = 500;// 设置视图名称为"Error"context.Result = new ViewResult { ViewName = "Error" };// 将异常信息传递给视图((ViewResult)context.Result).ViewData["Exception"] = context.Exception;// 标记异常已被处理context.ExceptionHandled = true;}private void LogException(Exception exception){// 将异常信息记录到日志中// 例如: logger.LogError(exception, "An unhandled exception occurred.");}
    }
    
  4. ResultFilterAttribute:
    示例:实现一个 JSON 格式化过滤器,将控制器动作方法的返回值自动序列化为 JSON 格式。

    public class JsonResultFilterAttribute : ResultFilterAttribute
    {public override void OnResultExecuting(ResultExecutingContext context){// 检查返回值是否为 JsonResult 类型if (context.Result is JsonResult jsonResult){// 将返回值序列化为 JSON 格式var json = JsonConvert.SerializeObject(jsonResult.Value);// 设置响应内容类型为 application/jsoncontext.HttpContext.Response.ContentType = "application/json";// 将 JSON 字符串写入响应context.HttpContext.Response.WriteAsync(json);// 标记结果已被处理context.Cancel = true;}}
    }
    

其他过滤器的使用示例可以参考官方文档或其他相关资料。总的来说,这些过滤器可以帮助开发者在 Web 应用程序中实现各种横切关注点,提高代码的可重用性和可维护性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/14977.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Serverless应用引擎SAE评测|一分钟部署在线游戏

Serverless应用引擎SAE评测|一分钟部署在线游戏 什么是Serverless应用引擎SAE一分钟部署在线游戏SAE控制台 资源释放其他操作 在进行Serverless应用引擎SAE评测之前&#xff0c;首先需要了解一下什么是SAE。 什么是Serverless应用引擎SAE Serverless应用引擎SAE&#xff08;Se…

代码随想录-算法训练营day50【动态规划12:最佳买卖股票时机含冷冻期、买卖股票的最佳时机含手续费、股票问题总结】

代码随想录-035期-算法训练营【博客笔记汇总表】-CSDN博客 第九章 动态规划part12● 309.最佳买卖股票时机含冷冻期 ● 714.买卖股票的最佳时机含手续费 ●总结309.最佳买卖股票时机含冷冻期 本题加了一个冷冻期,状态就多了,有点难度,大家要把各个状态分清,思路才能清晰…

【EXCEL_VBA_基础知识】15 使用ADO操作外部数据

课程来源&#xff1a;王佩丰老师的《王佩丰学VBA视频教程》&#xff0c;如有侵权&#xff0c;请联系删除&#xff01; 目录 1. 使用ADO链接外部数据源 2. 常用SQL语句&#xff08;Execute(SQL语句)&#xff09; 2.1 查询数据、查询某几个字段、带条件查询、合并两表数据、插…

手把手教你解决 Hive 的数据倾斜

文章目录 数据倾斜是什么&#xff1f;产生数据倾斜的场景1.空值引发的数据倾斜2.不可拆分的大文件产生的数据倾斜3.数值膨胀引发的数据倾斜4.不同数据类型引发的数据倾斜5.Count(distinct) 引发的数据倾斜6.表 Join 操作时引发数据倾斜7.group by 引发的数据倾斜 解决数据倾斜数…

easyswoole3.5 redis使用

安装redis指定版本 composer require easyswoole/redis:^1.3 redis配置&#xff0c;dev.php <?phpuse EasySwoole\Log\LoggerInterface;return [SERVER_NAME > "EasySwoole",MAIN_SERVER > [LISTEN_ADDRESS > 0.0.0.0,PORT > 9503,SERVER_TYPE &g…

MySQL之性能剖析(三)

剖析MySQL查询 剖析单条查询 在定位到需要优化的单条查询后&#xff0c;可以针对查询"钻取"更多的信息&#xff0c;确认为什么会花费这么长的时间执行&#xff0c;以及需要如何去优化。不幸的是&#xff0c;MySQL目前大多数的测量点对于剖析查询都没有什么帮助。当…

Python | Leetcode Python题解之第100题相同的树

题目&#xff1a; 题解&#xff1a; class Solution:def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:if not p and not q:return Trueif not p or not q:return Falsequeue1 collections.deque([p])queue2 collections.deque([q])while queue1 and queue2:node…

网络拓扑—FTP服务搭建

文章目录 FTP服务搭建网络拓扑配置网络FTPPC 安装FTP服务配置FTP服务FTP用户配置—1PC机访问FTP站点IE浏览器访问终端访问 FTP用户配置—2PC机访问ftp站点IE浏览器访问终端访问 FTP服务搭建 网络拓扑 //交换机忽略不计 FTP服务IP&#xff1a;192.168.1.1 PC机IP&#xff1a;19…

多级留言/评论的功能实现——Vue3前端篇

文章目录 思路分析封装组件父组件模板逻辑样式 子组件——二级留言模板逻辑样式 子组件——三级留言以上模板逻辑样式 留言组件的使用 写完论文了&#xff0c;来把评论的前端部分补一下。 前端的实现思路是自己摸索出来的&#xff0c;没找到可以符合自己需求的参考&#xff0c;…

windows 7 10 11快捷键到启动页面

1.快速打开用户启动文件夹 shell:startup 方式2&#xff1a;快速打开系统启动文件夹 shell:Common Startup shell:Common Startup

编译器 编译过程 compiling 动态链接库 Linking 接口ABI LTO PGO inline bazel增量编译

编译器 编译过程 compiling 动态链接库 Linking 接口ABI LTO PGO Theory Shared Library Symbol Conflicts (on Linux) 从左往右查找:Note that the linker only looks further down the line when looking for symbols used by but not defined in the current lib.Linux 下…

统计信号处理基础 习题解答10-4

题目&#xff1a; 重复习题10.3&#xff0c;但条件PDF变为&#xff1a; 以及均匀先验。如果非常大&#xff0c;这样先验知识很少&#xff0c;则会出现什么情况。 解答&#xff1a; 如果记 那么&#xff0c;根据条件独立性质&#xff0c;得到&#xff1a; 其中&#xff0c;&am…

linux 生成可执行文件

pip install pyinstaller pyinstaller --onefile xunhuan.py 在centos系统中&#xff0c;安装pyinstaller&#xff0c;然后执行命令&#xff0c;生成文件可以直接调用&#xff0c;比如 /root/dist/xunhuan 在/root/目录下&#xff0c;系统环境一般问题很大&#xff0c;找到…

java单元测试:使用Mockito模拟外部依赖

使用Mock对象来模拟外部依赖是单元测试中的重要技巧&#xff0c;特别是在你需要测试的代码依赖于外部系统&#xff08;如数据库、网络服务等&#xff09;时。Mock对象允许你在不实际调用这些外部系统的情况下测试代码的行为&#xff0c;从而提高测试的独立性和执行速度。 什么…

巧用count与count()

在C#中&#xff0c;talentInnoPfChains.Count() 和 talentInnoPfChains.Count 的性能差异主要取决于 talentInnoPfChains 的类型。这里有两种可能的情况&#xff1a; 如果 talentInnoPfChains 是一个实现了 ICollection<T> 接口的集合&#xff08;如 List<T>, Hash…

NLP与训练模型-GPT-3:探索人工智能语言生成的新纪元

在人工智能领域&#xff0c;自然语言处理&#xff08;NLP&#xff09;一直是备受关注的研究方向之一。随着深度学习技术的发展&#xff0c;尤其是Transformer模型的出现&#xff0c;NLP领域取得了巨大的进步。其中&#xff0c;由OpenAI推出的GPT-3模型更是引起了广泛的关注和热…

SwiftUI中的组合动画(Simultaneous, Sequenced, Exclusive)

了解了常见的几种手势后&#xff0c;接下来我们了解一下组合手势的操作&#xff0c;当一个视图存在多个手势的时候&#xff0c;为了避免手势冲突&#xff0c;SwiftUI提供了自定义手势的方法&#xff0c;比如同时进行&#xff0c;顺序进行等等。 以下是一些常见的多种手势组合使…

关于AI绘画的模型、开源项目、工具、技巧的学习

目录 一、AI绘画的大模型有哪些&#xff1f; 二、Stable Diffusion是一个流行的AI绘画开源项目。 三、AI绘画的开源工具有哪些&#xff1f; 四、AI绘画的技巧 五、最简单的实践 一、AI绘画的大模型有哪些&#xff1f; AI绘画领域中存在多种大模型&#xff0c;每种模型都有…

渗透测试 一个很奇怪的支付漏洞

新手实战刷课网站、好玩又有趣&#xff01; 第一步 打开网站、任意账户名密码登陆发现验证码可重复利用 这时候我们可以试试admin账号、发现如果账号正确会提示账户已存在、反之回显账户密码错误 第二步 既然验证码可以重复利用&#xff1b;而且账号名有回显 这时候我们试…