我根据上述定义,当用户请求重定向mysite.com/的HomeController的动作应被调用,并且在该定义中的global.asax两条路线如以下ASP.NET MVC路由缺省值
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()
});
:
public class HomeController : Controller
{
public ActionResult Redirect()
{
return RedirectToRoute("UrlResolver");
}
}
我想重定向用户对上述第二规定的路线,所以还我指定为和默认值的一些约束对于每个那些。但是当RedirectToRoute("UrlResolver")
转向时,没有默认值传递给第二条路线上的routeConstraints,并显示No route in the route table matches the supplied values
。
更新
我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;
}
}
}
现在值参数没有文化的键/值,但路由参数有。
你重新编译了你的应用程序吗?我使用我对问题的理解创建了一个示例应用程序,但无法复制您的错误。我相反得到了我的理解是您的预期结果(重定向到UrlResolver路由) – 2010-06-08 06:03:14
是的,我重新编译;我的问题是,当我使用RedirectToRoute时,文化的第二个路线的默认值为空(RouteValueDictionary上没有路线键/值以检索CultureRouteConstraint上的值) – Sadegh 2010-06-08 06:17:42