添加MVC约束仍然调用Controller方法

时间:2011-07-04 16:23:43

标签: asp.net-mvc-3 asp.net-mvc-routing

我正在尝试向constraint添加controller。我可能完全错了,但我的理解是,如果route不匹配,那么不应该调用constructor方法吗?

这是我的路线:

routes.MapRoute(
    "UserProfile",
    "UserProfile/{userName}",
    new { controller = "UserProfile", action = "Index" },
    new { userName = @"[a-zA-Z]+" }
);

所以,我认为这是因为我要求userName,当我点击网址mywebsite/UserProfile时,它应该不匹配?如果有人可以帮忙解决route 而不是调用constructor方法,那么请一些人纠正我的想法,因为userName遗漏了{{1}}也会很棒。

1 个答案:

答案 0 :(得分:0)

如果您只注册了此路由,则控制器将不会被此路由实例化或命中。我假设您正在观察的行为是由于您还离开了默认路由注册,该注册将请求/UserProfileUserProfile控制器和Index操作匹配:< / p>

routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }
); 

因此,删除此默认路由,您应该没问题。您的路线定义应如下所示:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        "UserProfile",
        "UserProfile/{userName}",
        new { controller = "UserProfile", action = "Index" },
        new { userName = @"[a-zA-Z]+" }
    );
}