Перезапись URL-адреса в asp.net 3.5 с несколькими строками запроса

У меня есть веб-приложение, связанное с путешествиями, в котором мой URL-адрес выглядит так:

MyTravel/Tour/Inner.aspx?Pid=2&Cid=8

и

MyTravel/Tour/Inner.aspx?Pid=2&Cid=8&DeptF=ND

Теперь я хочу, чтобы URL-адрес переписывался в моем приложении, например

MyTravel/Tour/Goa/new-year-goa

здесь goa и новогоднее goa извлекаются по значениям pid и cid.

Помоги мне.

заранее спасибо

[EDIT: Реформация]


person social    schedule 18.04.2013    source источник


Ответы (1)


Перезапись URL-адреса может быть выполнена следующим образом:

void Application_BeginRequest(object sender, EventArgs e) {

    string fullOrigionalpath = Request.Url.ToString();

    if (fullOrigionalpath.Contains("/Tour/Inner.aspx?Pid=2&Cid=8")) {
        Context.RewritePath("/Tour/Goa/new-year-goa");
    }
    else if (fullOrigionalpath.Contains("/Tour/Inner.aspx?Pid=2&Cid=8&DeptF=ND")) {
        Context.RewritePath("/Tour/Goa/new-year-goa"); 
        //This can be something else according to your requirements.
    }
} 

Вы можете посмотреть на этот http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx

Или же вы можете изменить свой web.config для достижения цели,

вот образец,

<?xml version="1.0"?>

<configuration>

<configSections>
<section name="rewriter"  
         requirePermission="false" 
     type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter" />
</configSections>

<system.web>

<httpModules>
  <add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter"/>
</httpModules>

</system.web>

<rewriter>
 <rewrite url="~/Tour/Inner.aspx?Pid=2&Cid=8" to="~/Tour/Goa/new-year-goa" />
 //Some other re-writers to achieve specific requirements.
</rewriter>  

</configuration> 

[РЕДАКТИРОВАТЬ: Следующее может быть одним из решений]

в порядке. Итак, как вы говорите, вам нужно проверить pid и cid, чтобы перенаправить соответственно,

Один из способов добиться этого ниже,

  • Request.QueryString("Pid") и Request.QueryString("Cid")
  • сохранить их в некоторые переменные,
  • проверьте эти переменные с помощью некоторого механизма switch... case и в соответствии с переданным условием установите путь, используя Context.ReWritePath("Your Specified Path")

Другой способ сделать это - использовать базу данных,

  • создать таблицу, содержащую три столбца: pid, cid и location_path
  • Теперь получите cid и pid, используя вышеупомянутый Request.QueryString.
  • используя sql-запрос, выберите местоположение из таблицы, которое соответствует cid и pid, полученным Request.QueryString, и установите его с помощью Context.ReWritePath

Надеюсь, теперь это вам ясно.

Надеюсь, поможет.

person Hiren Pandya    schedule 18.04.2013
comment
Ну, я не уверен насчет SEO, вы должны протестировать его вживую, чтобы подтвердить. - person Hiren Pandya; 18.04.2013
comment
спасибо, сэр, на самом деле у меня много пакетов, поэтому идентификаторы (Pid = 2 и Cid = 8) будут больше 200, поэтому, пожалуйста, скажите мне, как динамически (используя сопоставление регулярных выражений / шаблонов) я достигаю этой цели, я не хочу с этим справляться как хардкод. - person social; 18.04.2013
comment
Этот fullOrigionalpath.Contains("/Tour/Inner.aspx?Pid=2&Cid=8") проверит, содержит ли URL Pid=2&Cid=8 или нет. В нашем случае вам нужно указать все cids и pids, если вы хотите, чтобы они перенаправляли на соответствующие URL-адреса. Регулярное выражение позволит вам проверить, есть ли pid и cid или нет, но для перенаправления вам нужно их сравнить для ваших пакетов и перенаправить их соответственно... - person Hiren Pandya; 18.04.2013
comment
Сэр, на самом деле я хочу, чтобы если pid был равен 33 (agra), а cid — 540 (tajmahal), то это выглядело как MyTravel/Tour/agra/tajmahal, а если нет строки запроса, то он просто перемещался домой. Итак, как это возможно, можете ли вы предоставить мне пример кода, пожалуйста, это очень срочно. - person social; 18.04.2013