在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);

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

最新文章

  1. ZOJ Problem Set - 1006 Do the Untwist
  2. C++中的内联成员函数与非内联成员函数
  3. 无废话Android之listview入门,自定义的数据适配器、采用layoutInflater打气筒创建一个view对象、常用数据适配器ArrayAdapter、SimpleAdapter、使用ContentProvider(内容提供者)共享数据、短信的备份、插入一条记录到系统短信应用(3)
  4. UDK:AdventureKit 攀爬系统
  5. 19 图形用户界面编程 - 《Python 核心编程》
  6. SPRING IN ACTION 第4版笔记-第十章Hitting the database with spring and jdbc-002-本章的源代码
  7. C插入排序
  8. Service与Activity与交流AIDL
  9. Python迭代和解析(5):搞懂生成器和yield机制
  10. springboot +thymeleaf+myql 记录
  11. mysql执行sql脚本文件
  12. GSM与GPRS的区别
  13. RPO攻击 & share your mind
  14. with文件操作
  15. Deap thinking
  16. Lua Linux环境下安装
  17. zedboard开发板上移植opencv代码(立体匹配)
  18. tomcat 配置域名访问应用
  19. CefSharp.OffScreen.Example
  20. Mybatis中的update动态SQL语句

热门文章

  1. macos php安装扩展sqlsrv连接sqlserver
  2. windows 异步通知I/O模型与重叠I/O模型
  3. git for mac
  4. Qt文本读写之二:目录操作
  5. 亚马逊左侧菜单延迟z三角 jquery插件jquery.menu-aim.js源码解读
  6. web简单的整体测试
  7. C#基础学习5
  8. 使用ant build build.xml报“includeantruntime was not set”警告及"Class not found: javac1.8"问题
  9. slimScroll的应用(一)
  10. Macbook air 上打开cocoscreator出错