Вам необходимо использовать ограничения маршрутов на ваших маршрутах, это означает, что вы должны добавить RouteValueDictionary в экземпляре Route в свойстве Contraints
В следующем примере показано, как использовать виртуальную папку для обозначения UICulture.
например:.
RouteTable.Routes.Add(new Route("{locale}/{page}", new CultureRouter())
{
Constraints = new RouteValueDictionary() {
{ "locale", "[a-z]{2}-[a-z]{2}" } ,
{ "page", "([a-z0-9]*).aspx" }
}
});
RouteTable.Routes.Add(new Route("{folder}/{page}", new CultureRouter())
{
Constraints = new RouteValueDictionary() {
{ "page", "([a-z0-9]*).aspx" }
}
});
RouteTable.Routes.Add(new Route("{locale}/{folder}/{page}", new CultureRouter())
{
Constraints = new RouteValueDictionary() {
{ "locale", "[a-z]{2}-[a-z]{2}" } ,
{ "page", "([a-z0-9]*).aspx" }
}
});
В этом случае этот маршрут оценивает регулярное выражение для ключа локали и ключа страницы, а затем вам нужно оценить все ключи в вашем классе IRouteHandler
например:
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
StringBuilder virtualPath = new StringBuilder("~/Pages/");
if (requestContext.RouteData.Values.ContainsKey("locale"))
{
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(requestContext.RouteData.Values["locale"].ToString());
}
if (requestContext.RouteData.Values.ContainsKey("folder"))
{
virtualPath.AppendFormat("{0}/", requestContext.RouteData.Values["folder"].ToString());
}
if (requestContext.RouteData.Values.ContainsKey("page"))
{
virtualPath.Append(requestContext.RouteData.Values["page"].ToString());
}
IHttpHandler pageHandler = BuildManager.CreateInstanceFromVirtualPath(virtualPath.ToString(), typeof(Page)) as IHttpHandler;
return pageHandler;
}
Я надеюсь, что это поможет вам.