首页 > 编程语言 >mvc4 操作筛选器(C#)

mvc4 操作筛选器(C#)

时间:2023-08-03 18:34:04浏览次数:44  
标签:mvc4 Index 控制器 Log C# 操作 筛选 public


本教程的目标是解释操作筛选器。 操作筛选器是一个属性,您可以将应用于控制器操作 — — 或整个控制器--,修改在其中执行操作的方式。


了解操作筛选器

本教程的目标是解释操作筛选器。操作筛选器是一个属性,您可以将应用于控制器操作 — — 或整个控制器--,修改在其中执行操作的方式。ASP.NET MVC 框架包括几个操作筛选器:

  • OutputCache — — 此操作筛选器缓存为指定的时间量的控制器操作的输出。
  • HandleError — — 此操作筛选器处理引发的控制器操作执行时的错误。
  • Authorize — — 此操作筛选器使您可以限制对特定的用户或角色的访问。

您还可以创建您自己的自定义操作筛选器。例如,您可能想要创建自定义操作的筛选器,以执行自定义身份验证系统。或者,您可能想要创建操作筛选器来修改控制器操作所返回的视图数据。

在本教程中,您学习了如何建立从地面操作筛选器。我们创建登录到 Visual Studio 输出窗口中的不同阶段的加工操作的日志操作筛选器。

使用操作筛选器

操作筛选器是一个属性。您可以对单个控制器操作或整个控制器应用大多数操作筛选器。

例如,清单 1 中的数据控制器公开命名为Index()这一行动被装饰OutputCache操作筛选器。此筛选器会导致要为 10 秒缓存的操作所返回的值。清单 1 — — Controllers\DataController.cs

using System;
using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
     public class DataController : Controller
     {
          [OutputCache(Duration=10)]
          public string Index()
          {
               return DateTime.Now.ToString("T");

          }
     }
}

如果您反复调用Index()行动通过您的浏览器在地址栏中输入 URL /Data/Index 和多次击中刷新按钮,然后您将看到同一时间为 10 秒。Index()操作的输出的高速缓存为 10 秒 (见图 1)。



图 01: 缓存时间(点击查看完全尺寸的图像)




在清单 1 中,一个单一操作筛选器 — — OutputCache操作筛选器 — — 应用于Index()方法。如果您需要,您可以对相同的操作,应用多个操作筛选器。例如,你可能想要将OutputCacheHandleError操作筛选器应用于相同的操作。清单 1 中的OutputCache操作筛选器应用于Index()行动。您还可以应用此属性DataController类本身。在这种情况下,由控制器所公开的任何操作返回的结果会缓存 10 秒。

不同类型的筛选器

ASP.NET MVC 框架支持四种不同类型的筛选器:

IAuthorizationFilter

  1. 属性。

IActionFilter

  1. 属性。

IResultFilter

  1. 属性。

IExceptionFilter

  1. 属性。

筛选器的执行上面列出的顺序。例如,授权筛选器将总是在操作筛选器之前执行,异常筛选器将始终执行后每个其他类型的筛选器。

授权筛选器用于实现身份验证和授权的控制器操作。例如,授权筛选器是一个示例授权筛选器。

操作筛选器包含执行之前和之后的控制器操作执行的逻辑。你可以使用操作筛选器,例如,修改控制器操作返回的视图数据。

结果筛选器包含的逻辑,执行之前和之后执行视图结果。例如,您可能想要修改视图结果右视图呈现到浏览器之前。

异常筛选器筛选器运行的最后一个类型。您可以使用异常筛选器来处理您的控制器操作或控制器操作结果由引发的错误。此外可以使用异常筛选器来记录错误。

每种不同类型的筛选器按特定的顺序执行。如果你想要控制在其中执行相同类型的筛选器的顺序你可以设置一个筛选器的 Order 属性。

所有操作筛选器的基类是System.Web.Mvc.FilterAttribute 类。如果您想要执行特定类型的筛选器,然后,您需要创建一个类,从筛选器基类继承并实现一个或更多的IAuthorizationFilter、 IActionFilterIResultFilterExceptionFilter接口。

ActionFilterAttribute 类的基类

为了使您更轻松地实现自定义操作筛选器,ASP.NET MVC 框架包括ActionFilterAttribute的基类。此类实现的IActionFilterIResultFilter接口,并从Filter的类继承。

这里的术语不是完全一致的。从技术上讲,从 ActionFilterAttribute 的类继承的类是操作筛选器和结果筛选器。然而,在松散的感觉,word 操作筛选器用来对任何类型的 ASP.NET MVC 框架中的筛选器,请参阅。

ActionFilterAttribute类的基类具有下列方法,您可以重写:

  • OnActionExecuting — — 控制器中的操作执行之前调用此方法。
  • OnActionExecuted — — 控制器中的操作执行后调用此方法。
  • OnResultExecuting — — 控制器操作结果执行之前调用此方法。
  • OnResultExecuted — — 这种方法称为后执行的控制器操作结果。

在下一节中,我们将看到如何可以实现每一种不同的方法。

创建日志操作筛选器

为了说明如何您可以生成一个自定义操作筛选器,我们将创建一个自定义操作筛选器,日志处理到 Visual Studio 输出窗口的控制器操作的阶段。我们的LogActionFilter是在清单 2 中所载。清单 2 — — ActionFilters\LogActionFilter.cs

using System;
using System.Diagnostics;
using System.Web.Mvc;
using System.Web.Routing;

namespace MvcApplication1.ActionFilters
{
     public class LogActionFilter : ActionFilterAttribute

     {
          public override void OnActionExecuting(ActionExecutingContext filterContext)
          {
               Log("OnActionExecuting", filterContext.RouteData);       
          }

          public override void OnActionExecuted(ActionExecutedContext filterContext)
          {
               Log("OnActionExecuted", filterContext.RouteData);       
          }

          public override void OnResultExecuting(ResultExecutingContext filterContext)
          {
               Log("OnResultExecuting", filterContext.RouteData);       
          }

          public override void OnResultExecuted(ResultExecutedContext filterContext)
          {
               Log("OnResultExecuted", filterContext.RouteData);       
          }


          private void Log(string methodName, RouteData routeData)
          {
               var controllerName = routeData.Values["controller"];
               var actionName = routeData.Values["action"];
               var message = String.Format("{0} controller:{1} action:{2}", methodName, controllerName, actionName);
               Debug.WriteLine(message, "Action Filter Log");
          }

     }
}

上市 2、 OnActionExecuting()、 OnActionExecuted()、 OnResultExecuting()OnResultExecuted()方法的所有调用Log()方法。方法的名称和当前的路由数据传递给Log()方法。Log()方法将消息写入到 Visual Studio 输出窗口 (见图 2)。



图 02: 写入 Visual Studio 输出窗口(单击以查看完全尺寸的图像)




主控制器在清单 3 中说明了如何可以将所需的日志操作筛选器应用于整个控制器类。每当任何公开的主控制器的操作调用 — — Index()方法或About()方法 — — 阶段的加工操作记录到 Visual Studio 输出窗口。清单 3 — — Controllers\HomeController.cs

using System.Web.Mvc;
using MvcApplication1.ActionFilters;

namespace MvcApplication1.Controllers
{
     [LogActionFilter]
     public class HomeController : Controller
     {
          public ActionResult Index()
          {
               return View();
          }

          public ActionResult About()
          {

               return View();
          }
     }
}

摘要

在本教程中,是向您介绍 ASP.NET MVC 操作筛选器。您已经学习了四个不同类型的筛选器: 授权筛选器、 操作筛选器、 结果筛选器和异常筛选器。您还学习了ActionFilterAttribute类的基类。

最后,您学习了如何实现一个简单的操作,筛选器。我们创建了日志的阶段处理到 Visual Studio 输出窗口的控制器操作日志操作筛选器。

标签:mvc4,Index,控制器,Log,C#,操作,筛选,public
From: https://blog.51cto.com/u_15999672/6951779

相关文章

  • 【软件工具安装使用】opencv交叉编译
    前言 环境准备 编译配置 opencv交叉编译  opencv_contrib交叉编译 问题1. 对‘png_do_expand_palette_rgba8_neon’未定义的引用若出现3rdparty/lib/liblibpng.a(pngrtran.c.o):在函数‘png_do_read_transformations’中:pngrtran.c:(.text.png_do_read_transf......
  • C# MVC 自学笔记—10 在 ASP.NET MVC 中使用页面检查器
    VisualStudio2012年页督察是与集成的浏览器的web开发工具。中集成浏览器中,选择任意元素,页面检查器立即突出显示该元素的源代码和CSS。可以浏览任何MVC视图、快速查找呈现标记的来源和使用右内的VisualStudio环境浏览器工具。观看视频本教程演示如何启用检查模式,然后快......
  • WebRTC研究:RTP报头扩展
    RTPHeaderRTP协议中,RTPHeader(报头)包括固定报头(FixedHeader)与报头扩展(Headerextension,可选)。RTPFixedHeader结构如下,其中前12字节是每个RTP包必须包含的。01230123456789012345678......
  • 三步教你怎么使用iSCSI Manager,你GET了吗?
    铁威马有很多实用的功能,帮助我们更好的保存数据。铁威马的iSCSIManager可帮助您轻松管理和监控iSCSI服务。挂载成功之后,您访问iSCSILUN的虚拟磁盘就像访问本地存储空间一样方便。那么怎么使用iSCSIManager?下面分三大步为大家详细介绍该用法,快速上手不在话下~ 01如何下......
  • 堆 Heap & 栈 Stack(.Net)【概念解析系列_3】【C# 基础】
    〇、前言本文主要围绕.Net框架中的托管堆(Heap,简称堆)和堆栈(Stack,简称栈)展开。.Net程序在CLR(CommonLanguageRuntime公共语言运行时)上运行时,内存被从逻辑上划分为两个主要部分:堆和栈。除了栈和堆之外,CLR还维护了其他一些内存区域,例如静态存储区域(StaticStorageArea)、常量......
  • JavaScript基础04
    函数函数定义function自定义函数名(){ 函数体代码;}//函数名命名:1.与变量名规则基本上是一样的!2.建议变量名使用名词,函数名用动词3.大小写敏感4.普通函数使用小驼峰,不要首字母大写5.首字母大写的函数一般用作自定义构造函数函数调用自定义函数名();匿名......
  • Vulnhub: hacksudo: aliens靶机
    kali:192.168.111.111靶机:192.168.111.175信息收集端口扫描nmap-A-sC-v-sV-T5-p---script=http-enum192.168.111.175目标80端口backup目录存在文件mysql.bak,下载后查看获得mysql账号密码登录9000端口的phpmyadmin,执行sql语句写入webshellselect'<?phpsystem($......
  • use iproc to config tdr during bscan
    1.casedescriptionwhenrunningbscan,aserialsofpinsneedtobecontrolledto1bytdr;astaticdftsignalwithdefaultvalue1wasregisteredby register_static_dft_signal_names,addedascontrolpointofthosepins;however,valuesarenot......
  • 在vscode的界面的竖线光标变成灰色方块,怎么解决?Mark一下
    在vscode的界面的竖线光标变成灰色方块,怎么解决?补充一下,也有可能是setting.json中设置所致,可以去看看setting.json中是否将cursorstyle设置为了block......
  • Excel分类后数字类型的内容值后面变为0
    背景在工作中经常遇到从日志或者其他地方拷贝过来的文本,里面使用其他分隔符进行分割。然而,使用Excel的分列功能进行分列后,发现数字类型的数值后面变为0。有时候我们就是需要原先的数值,该怎么办呢?比如,有如下的数据,以竖线|作为分割符。|员工编号|销售量|商品单价|销售额|20180......