переписывание URL в asp.net - PullRequest
       37

переписывание URL в asp.net

0 голосов
/ 12 апреля 2011

Эй, ребята, я использую asp.net 2.0 и dotnetnuke 5.6, и использую модуль crossarticle, теперь я хочу, чтобы пользователь мог создать несколько псевдонимов для статьи.

скажи, как показано ниже. Статья / StackOverflow stackexchange / статьи и т.д ..

говорят, что первая статья связана с идентификатором статьи 1, а вторая связана со статьей 2, а затем они должны перейти на соответствующие страницы. как статья / 1 или статья / 2

Я могу сделать это из файла web.config ... но проблема в том, что могут быть лаки псевдонимов, поэтому сохранение его в файле web.config является идеей провала. так что я хочу сделать это с файлом global.asax ..

я попробовал ниже код:

в строковой переменной, которую я сохранил: Request.RawUrl.ToString () а затем сравнивая его с введенным пользователем URL-адресом, а затем перенаправляя его на соответствующую страницу ...

но у меня возникают следующие проблемы: Я не хочу, чтобы пользователь перенаправлял. Я хочу переписать URL, то есть, если пользователь вводит article / stackoverflow ... он должен быть перенаправлен на страницу article / 1, но URL должен сохраняться.

Пожалуйста, кто-нибудь предложит что-нибудь для этой проблемы

1 Ответ

1 голос
/ 12 апреля 2011

Чтобы переписать URL (в отличие от перенаправления), вы можете сделать что-то вроде этого:

private static void RewriteUrl(HttpApplication application, TabInfo tabInfo, string additionalQueryString)
{
    application.Context.Items["UrlRewrite:OriginalUrl"] = application.Request.Url.AbsoluteUri;

    var portalAliasInfo = PortalAliasController.GetPortalAliasInfo(application.Context.Request.Url.DnsSafeHost);        
    application.Context.Items["PortalSettings"] = new PortalSettings(tabInfo.TabID, portalAliasInfo);

    var queryString = String.Format("tabid={0}" + additionalQueryString, tabInfo.TabID);
    application.Context.RewritePath("~/default.aspx", string.Empty, queryString, false);
}

Я бы порекомендовал сделать это в модуле http вместо модуля основного кода.

...