以下のようにglobal.asaxで2つのルートを定義しました
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");
}
}
上記の2番目に定義されたルートにユーザーをリダイレクトしたいので、そのデフォルト値とそれぞれの制約を指定しました。しかし、RedirectToRoute("UrlResolver")
順番が変わると、2 番目のルートで 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;
}
}
}
現在、値パラメーターにはカルチャ キー/値がありませんが、ルート パラメーターにはそれがあります。