Я был на этом почти 2 дня, и я действительно чувствую себя застрявшим. Я уже несколько лет управляю сайтом, использующим MapPageRoute для создания URL-адресов для нескольких сотен «страниц», которые все обрабатываются «~ / default.aspx» через поиск данных страниц в базе данных. Весь сайт не такой (то есть это не одностраничный сайт), но большая его часть такова.
Он работает нормально, за исключением того, что я не могу использовать строки запроса на сопоставленных маршрутах. Метод RegisterRoutes в global.asax:
public static void RegisterRoutes(RouteCollection routes)
{
routes.Clear();
routes.Ignore("{resource}.ashx/{*pathInfo}"); //ignore ashx files
routes.Ignore("{resource}.axd/{*pathInfo}"); //ignore axd files, prevents javascript/routing collisions
routes.MapPageRoute("SitePage", "{*page_url}", "~/default.aspx", false);
}
Я использую подстановочный знак в сегменте пути. К сожалению, разрешен только один подстановочный знак. {* page_url} обычно представляет от 1 до 4 сегментов. Я пробовал различные формы кода IRouteHandler и IHttpHandler, но я не вижу, как изменить URL-адрес, отображаемый в клиентском браузере. Я могу использовать подстановочный знак таким образом, потому что ни один из маршрутов не мешает физическим файлам.
Единственная причина, по которой я хочу сохранить строку запроса, состоит в том, что Google Adwords добавляет строку? Gclid = xxxxxxxxx к рекламной ссылке, а Google Analytics .js использует эту строку запроса для отчета.
Пример URL-адреса проблемы:
/about-us/community/philanthropy (resolves fine)
/about-us/community/philanthropy?gclid=xxxxxxx (redirects back to:)
/about-us/community/philanthropy
В моем web.config нет настроек перезаписи URL, которые могут на это повлиять.
Изрядное количество моих исследований SO и других источников относится к сайтам MVC. Это сайт WebForms.
Пример, аналогичный вопрос, но для MVC: Как перенаправить URL-адрес со строкой запроса в ASP.NET MVC?