您的位置:首页 > 编程语言 > ASP

如何在ASP.NET MVC为Action定义筛选器

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

  

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

public class TestController : Controller
{

public string FirstPage()
{
return "请输入ID";
}
//
// GET: /Test/

[InputID]
public string Index(int id)
{
return "已经输入了ID";
}
}


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

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

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

//
// 摘要:
//     在执行操作方法之前由 ASP.NET MVC 框架调用。
//
// 参数:
//   filterContext:
//     筛选器上下文。
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方法,该方法在动作方法之前执行,最终产生不同的执行结果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: