如何在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方法,该方法在动作方法之前执行,最终产生不同的执行结果。

转载于:https://www.cnblogs.com/SharpL/p/4617405.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值