mvc的路由

MVC 路由中最经典的就是:

routes.MapRoute(
              "Default",                                              // Route name
              "{controller}/{action}/{id}",                           // URL with parameters
              new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
          );

其实这们routes的类型是RouteCollection, 更精确点说是System.Web.Routing.RouteCollection

是ASP.NET中本来就有的,不是专为MVC编写的。

routes.MapRoute这个方法的重载有6个之多
public static Route MapRoute(this RouteCollection routes, string name, string url);

public static Route MapRoute(this RouteCollection routes, string name, string url, object defaults);

public static Route MapRoute(this RouteCollection routes, string name, string url, string[] namespaces);

public static Route MapRoute(this RouteCollection routes, string name, string url, object defaults, object constraints);

public static Route MapRoute(this RouteCollection routes, string name, string url, object defaults, string[] namespaces);

public static Route MapRoute(this RouteCollection routes, string name, string url, object defaults, object constraints, string[] namespaces);

这里有个特殊的语法 this RouteCollection routes, 这个是C# 3.0加入的东西,叫扩展方法,具体可以看我转的博文

我们可以看到MVC中自动生成的路由是用的第二个重载。

namespaces,看名字是指定namespace的,怎么用的还不知道。

但是constraints的用法,我知道了,是添加约束的,如

routes.MapRoute(

"Product",

"Product/{productId}",

new {controller="Product", action="Details"},

new {productId = @"/d+" }

);

上面这个是,用正则指定了productId 必须是至少一位的数字。

再看下面的例子:

routes.MapRoute(

"Blog", // Route name

"Archive/{entryDate}", // URL with parameters

new { controller = "Archive", action = "Entry" } // Parameter defaults

);

这个例子是在URL中中只出现Controller名字,但是在内部总是使用指定action的例子。

其实根据这个constraints是可以自定义的。

文件: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;

}

}

}

------------------------

routes.MapRoute(

"Admin",

"Admin/{action}",

new {controller="Admin"},

new {isLocal=new LocalhostConstraint()}

);

这个限制admin的操作只允许在本地进行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值