zoukankan      html  css  js  c++  java
  • 如何在ASP.NET MVC为Action定义筛选器

      在ASP.NET MVC中,经常会用到[Required]等特性,在MVC中,同样可以为Action自定义筛选器,来描述控制器所遵守的规则。

      

      首先,我们在ASP.NET MVC项目中定义一个TestController,控制器中包含两个Action动作方法,代码如下:

     1     public class TestController : Controller
     2     {
     3 
     4         public string FirstPage()
     5         {
     6             return "请输入ID";
     7         }
     8         //
     9         // GET: /Test/
    10 
    11         [InputID]
    12         public string Index(int id)
    13         {
    14             return "已经输入了ID";
    15         }
    16     }

      从代码中可以看出,两个动作方法均返回字符串,不同之处是后者应用了自定义的InputID筛选器。

      然后,自定义筛选器Input,筛选器同样为C#类,其继承自ActionFilterAttribute类,实现IActionFilter接口。

      在自定义的筛选器中,重写基类中的OnActionExecuting虚方法,该方法会在执行Action方法之前由ASP.NET MVC框架调用,该方法说明如下:

    1         //
    2         // 摘要:
    3         //     在执行操作方法之前由 ASP.NET MVC 框架调用。
    4         //
    5         // 参数:
    6         //   filterContext:
    7         //     筛选器上下文。
    8         public virtual void OnActionExecuting(ActionExecutingContext filterContext);
    View Code

       Input筛选器代码如下:

        public class InputID : ActionFilterAttribute, IActionFilter
        {
            public override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                if(String.IsNullOrEmpty(filterContext.HttpContext.Request.QueryString["id"]))
                {
                    filterContext.Result = new RedirectResult("/test/FirstPage");
                    return;
                }
                else
                {
                    return;
                }
            }
        }

      依据代码,判断查询字符串中key为id的值,如果为空,将跳转到test控制器中的FirstPage方法。否则直接返回。

      

      自定义筛选器完成,实验,在浏览器中输入不同的URL,如图:

      

      

      综上,通过自定义筛选器,并定义OnActionExecuting方法,该方法在动作方法之前执行,最终产生不同的执行结果。

  • 相关阅读:
    Codeforces 1255B Fridge Lockers
    Codeforces 1255A Changing Volume
    Codeforces 1255A Changing Volume
    leetcode 112. 路径总和
    leetcode 129. 求根到叶子节点数字之和
    leetcode 404. 左叶子之和
    leetcode 104. 二叉树的最大深度
    leetcode 235. 二叉搜索树的最近公共祖先
    450. Delete Node in a BST
    树的c++实现--建立一棵树
  • 原文地址:https://www.cnblogs.com/SharpL/p/4617405.html
Copyright © 2011-2022 走看看