Asp.net mvc 2 ASP.NET MVC路由默认值
我在global.asax中定义了两条路由,如下所示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"
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上的值)