ASP.NET MVC路由默认值

时间:2010-06-08 05:56:11

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

我在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()
                            });

根据上面的定义,当用户请求调用HomeController的mysite.com/ redirect操作时,应该调用:

public class HomeController : Controller
{
    public ActionResult Redirect()
    {
        return RedirectToRoute("UrlResolver");
    }
}

我想将用户重定向到上面的第二个定义的路由,所以我也为此指定了默认值,并为每个路由器指定了一些约束。但是当RedirectToRoute("UrlResolver")转动时,没有默认值传递给第二条路线上的routeConstraints,No route in the route table matches the supplied values显示。

更新

my CultureRouteConstraint:

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;
        }
    }
}

现在值参数没有文化键/值,但路由参数有。

2 个答案:

答案 0 :(得分:1)

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

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

您可以在“UrlResolver”路线下添加“全部捕获”路线,以捕捉CultureRouteConstraint()与给定网址不匹配的情况。

答案 1 :(得分:1)

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