ASP.NET MVC Route Значения по умолчанию - PullRequest
3 голосов
/ 08 июня 2010

я определил два маршрута в 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") поворачивается, никакие значения по умолчанию не передаются в 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 ]

1 голос
/ 30 июня 2010

Фактическим маршрутом , указанным для вашего второго правила, является "{culture} / some", поэтому ваше перенаправление должно быть, например, на "/ EN-us / some", а не на название правила.

1 голос
/ 30 июня 2010

Реализация HomeController.Redirect (), кажется, не добавляет никакого дополнительного значения, так зачем вообще включать маршрут с именем «HomeRedirect»?

Как насчет того, чтобы просто удалить его и позволить вашему маршруту с именем "UrlResolver" обрабатывать запросы. Вы можете настроить значения по умолчанию так, как вам нравится.

Вы можете добавить маршрут «поймать все» ниже маршрута «UrlResolver», чтобы перехватывать случаи, когда CultureRouteConstraint () не соответствует указанному URL.

...