я определил два маршрута в 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;
}
}
}
теперь параметр значения не имеет ключа / значения культуры, но параметр маршрута имеет это.