Asp.net mvc 2 ASP.NET MVC路由默认值

Asp.net mvc 2 ASP.NET MVC路由默认值,asp.net-mvc-2,asp.net-routing,Asp.net Mvc 2,Asp.net Routing,我在global.asax中定义了两条路由,如下所示 context.MapRoute("HomeRedirect", "", new { controller = "Home", action = "redirect"

我在global.asax中定义了两条路由,如下所示

context.MapRoute("HomeRedirect", "",
                            new
                            {
                                controller = "Home",
                                action = "redirect"
                            });

context.MapRoute("UrlResolver", "{culture}/some",
                            new
                            {
                                culture = "en-gb",
                                controller = "someController",
                                action = "someAction"
                            },
                            new
                            {
                                culture = new CultureRouteConstraint()
                            });
根据上述定义,当用户请求mysite.com/重定向时,应调用HomeController的操作,其中:

public class HomeController : Controller
{
    public ActionResult Redirect()
    {
        return RedirectToRoute("UrlResolver");
    }
}
我想将用户重定向到上面定义的第二条路由,所以我也为它指定了默认值,并为每一条指定了一些约束。但是当
RedirectToRoute(“UrlResolver”)
转向时,在第二个路由上没有传递到RouteConstraint的默认值,并且
路由表中没有与提供的值匹配的路由

更新

我的培养基培养基培养基:

public class CultureRouteConstraint : IRouteConstraint
{
    bool IRouteConstraint.Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
    {
        try
        {
            var parameter = values[parameterName] as string;
            return (someCondition(parameter));
        }
        catch
        {
            return false;
        }
    }
}

现在,values参数没有区域性键/值,但route参数有该键/值。

HomeController.Redirect()的实现似乎没有添加任何附加值,那么为什么要包含名为“HomeRedirect”的路由呢

删除它并让名为“URLSolver”的路由处理请求怎么样。您可以根据需要配置默认值


您可以在“UrlResolver”路由下面添加一个“catch all”路由,以捕获CultureRouteConstraint()与给定URL不匹配的情况。

为第二条规则指定的实际路由是“{culture}/some”,因此您的重定向必须是,例如,重定向到“/EN us/some”而不是规则的名称。

您是否重新编译了应用程序?我根据我对您问题的理解创建了一个示例应用程序,但无法复制您的错误。相反,我得到了我理解为您期望的结果(重定向到URLSolver路由)是的,我重新编译了;我的问题是,当我使用RedirectToRoute时,第二个路由的区域性默认值为null(RouteValueDictionary上没有路由键/值来检索CultureRouteConstraint上的值)