У меня есть простой проект ASP.NET WebForms с несколькими страницами, и я бы хотел использовать дружественные URL (не только для SEO, но и для локализации URL-адресов). Я использую .NET 4.5 для этого проекта и пытался использовать пакет Microsoft.AspNet.FriendlyUrls nuget, который выглядел так, как будто он может помочь. Но есть одна проблема.ASP.NET WebForms: Request.GetFriendlyUrlFileVirtualPath() возвращает пустую строку
У меня в Global.asax это:
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
BundleConfig.RegisterBundles(BundleTable.Bundles);
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
и RouteConfig класс выглядит следующим образом:
public static class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapPageRoute("HowItWorks", "ako-to-funguje", "~/HowItWorks.aspx");
routes.MapPageRoute("AboutUs", "o-nas", "~/AboutUs.aspx");
routes.MapPageRoute("Contact", "kontakt", "~/Contact.aspx");
var settings = new FriendlyUrlSettings();
settings.AutoRedirectMode = RedirectMode.Permanent;
routes.EnableFriendlyUrls(settings);
}
}
Я хочу, чтобы показать ту же страницу, если вы к нему доступ через обе/HowItWorks и/ako-to-funguje (это словацкий язык).
И теперь я приближаюсь к актуальной проблеме. Когда я обращаюсь к сайту с одним из локализованных маршрутов (например,/ako-to-funguje), Request.GetFriendlyUrlFileVirtualPath() возвращает пустую строку (но я хочу получить «~/HowItWorks.aspx», на которой я хочу сделать что-то в главном страница).
string pageFileName = Request.GetFriendlyUrlFileVirtualPath();
switch (pageFileName)
{
case "~/AboutUs.aspx":
//do some stuff
break;
case "~/HowItWorks.aspx":
//do some stuff
break;
case "~/Contact.aspx":
//do some stuff
break;
default:
break;
}
Если я получить доступ к сайту с/HowItWorks URL затем Request.GetFriendlyUrlFileVirtualPath() возвращает "~/HowItWorks.aspx", как и ожидалось.
Любая идея, как получить «~/HowItWorks.aspx» из Request.GetFriendlyUrlFileVirtualPath() при доступе к сайту через/HowItWorks и/ako-to-funguje?
Спасибо Петрик, это отличное решение. Я пытался найти способ решения подобной проблемы в течение нескольких дней (см. Http://stackoverflow.com/q/22577826/236860), и это работает отлично. – Neilski
Это не работает, если у вас есть параметры в URL-адресе или если вы используете виртуальный каталог – Mike