[翻译:ASP.NET MVC 教程]创建自定义路由约束
2009-08-09 22:41
656 查看
本教程的目标是向你展示怎样创建一个自定义路由约束。自定义路由约束能使你防止一个路由被匹配,除非某个自定义表达式被匹配时。
在本教程中,我们创建了一个Localhost路由约束。Localhost路由约束仅匹配由本地计算机所发出的请求。跨Internet的远程请求将不被匹配。
通过实现IRouteConstraint接口,你可以实现一个自定义路由约束。这是一个极为简单的描述了一个单一方法的接口:
该方法返回一个布尔值。如果返回false,与该约束相关联的路由将不匹配浏览器的请求。
Localhost约束包含在清单1中。
清单1——LocalhostConstraint.cs
清单1中的约束利用了HttpRequest类中的IsLocal属性。当请求的IP地址为127.0.0.1或当请求的IP与服务器的IP地址相同时,该属性值返回true。
你使用一个定义在Global.asax文件内部的自定义约束。清单2中的Global.asax文件使用Localhost约束来防止任何人请求Admin页面,除非他们从本地服务器发出请求。例如,请求/Admin/DeleteAll将会失败,当该请求从远程服务器发出时。
清单2——Global.asax
Localhost约束在Admin路由的定义中被使用。该路由将不与远程浏览器请求匹配。然而,事实上其它在定义在Global.asax文件中的路由也可能匹配相同的请求。理解一个约束防止特定路由与某一请求匹配以及并不是所有的路由都定义在Global.asax文件中是很重要的。
注意到Default路由已在清单2中被注释掉了。如果你包含了Default路由,那么该路由将为Admin控制器匹配请求。在那种情况下,远程用户仍然能请求Admin控制器的动作,即使他们的请求不与Admin路由匹配。
作者:Kinglee
文章出处:Kinglee’s Blog (http://www.cnblogs.com/Kinglee/)
版权声明:本文的版权归作者与博客园共有。转载时须注明本文的详细链接,否则作者将保留追究其法律责任。
在本教程中,我们创建了一个Localhost路由约束。Localhost路由约束仅匹配由本地计算机所发出的请求。跨Internet的远程请求将不被匹配。
通过实现IRouteConstraint接口,你可以实现一个自定义路由约束。这是一个极为简单的描述了一个单一方法的接口:
bool Match( HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection )
该方法返回一个布尔值。如果返回false,与该约束相关联的路由将不匹配浏览器的请求。
Localhost约束包含在清单1中。
清单1——LocalhostConstraint.cs
using System.Web; using System.Web.Routing; namespace MvcApplication1.Constraints { public class LocalhostConstraint : IRouteConstraint { public bool Match ( HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection ) { return httpContext.Request.IsLocal; } } }
清单1中的约束利用了HttpRequest类中的IsLocal属性。当请求的IP地址为127.0.0.1或当请求的IP与服务器的IP地址相同时,该属性值返回true。
你使用一个定义在Global.asax文件内部的自定义约束。清单2中的Global.asax文件使用Localhost约束来防止任何人请求Admin页面,除非他们从本地服务器发出请求。例如,请求/Admin/DeleteAll将会失败,当该请求从远程服务器发出时。
清单2——Global.asax
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Routing; using MvcApplication1.Constraints; namespace MvcApplication1 { public class MvcApplication : System.Web.HttpApplication { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Admin", "Admin/{action}", new {controller="Admin"}, new {isLocal=new LocalhostConstraint()} ); //routes.MapRoute( // "Default", // Route name // "{controller}/{action}/{id}", // URL with parameters // new { controller = "Home", action = "Index", id = "" } // Parameter defaults //); } protected void Application_Start() { RegisterRoutes(RouteTable.Routes); } } }
Localhost约束在Admin路由的定义中被使用。该路由将不与远程浏览器请求匹配。然而,事实上其它在定义在Global.asax文件中的路由也可能匹配相同的请求。理解一个约束防止特定路由与某一请求匹配以及并不是所有的路由都定义在Global.asax文件中是很重要的。
注意到Default路由已在清单2中被注释掉了。如果你包含了Default路由,那么该路由将为Admin控制器匹配请求。在那种情况下,远程用户仍然能请求Admin控制器的动作,即使他们的请求不与Admin路由匹配。
作者:Kinglee
文章出处:Kinglee’s Blog (http://www.cnblogs.com/Kinglee/)
版权声明:本文的版权归作者与博客园共有。转载时须注明本文的详细链接,否则作者将保留追究其法律责任。
相关文章推荐
- [翻译:ASP.NET MVC 教程]创建路由约束
- [翻译:ASP.NET MVC 教程]创建路由约束
- [翻译:ASP.NET MVC 教程]创建自定义路由
- ASP.NET MVC 之如何创建自定义路由约束
- [翻译:ASP.NET MVC 教程]创建自定义HTML辅助函数
- [ASP.NET MVC2 系列] ASP.NET MVC 之如何创建自定义路由约束
- ASP.NET MVC 之创建自定义路由约束
- asp.net MVC之创建自定义路由约束
- [翻译:ASP.NET MVC 教程]用ASP.NET MVC 创建一个电影数据库应用程序
- 创建自定义路由处理程序(Creating a Custom Route Handler) | 定制路由系统| 高级路由特性 |精通ASP-NET-MVC-5-弗瑞曼
- [翻译:ASP.NET MVC 教程]创建一个动作
- 《Entity Framework 6 Recipes》中文翻译系列 (21) -----第四章 ASP.NET MVC中使用实体框架之在页面中创建查询和使用ASP.NET URL路由过虑
- [翻译:ASP.NET MVC 教程]用ASP.NET MVC 创建一个电影数据库应用程序——补充
- ASP.NET MVC 路由进阶(之二)--自定义路由约束
- 【EntityFramework系列教程一,翻译】为ASP.NET MVC创建一个数据模型
- [翻译] ASP.NET MVC Tip #4 - 创建自定义数据控制器基类
- 认识 ASP.NET 3.5 MVC 路由 创建自定义路由
- [翻译] ASP.NET MVC Tip #13 – 对自定义路由进行单元测试
- [翻译:ASP.NET MVC 教程]创建一个控制器
- 认识 ASP.NET 3.5 MVC 路由 创建自定义路由