Здесь http://skidkabob.ru/promokody/mvideo скидка 500 рублей в М Видео.

Практический опыт применения IIS UrlRewrite 2.0

Автор Игорь Соколовский
Изменен 2011-09-04
Просмотров 8591

Хочу поделиться собственным опытом перевода ASP.NET сайта на IIS UrlRewrite 2.0, а так же рассказать о подводных камнях с которыми мне пришлось столкнуться и о путях решения возникших проблем.

Первая же проблема возникла при первом же тестировании первого же правила :) Правило преобразовывало входящую строку из "article/23/" в "?article=23". Проблема состоит в том, что ASP в action формы записывает уже преобразованный из пути текущей страницы QueryString:

<form name="aspnetForm" method="post" action="?article=23" onsubmit="javascript:return WebForm_OnSubmit();" id="aspnetForm">

По этой причине страница обваливалась после нажатия по любой кнопке или ссылке, вызывающей PostBack. Это происходило из-за дублирующегося параметра в QueryString. В нашем случае после нажатия по кнопке данные с формы отправлялись по пути: "article/23/?article=23". После преобразования пути IIS передавал в ASP.NET путь: " ?article=23&article=23". В ASP в параметре QueryString["article"] находилось значение "23,23". После последующего нажатия кнопки параметр затраивался и ASP героически падал, выдавая: "Не верно задан параметр в запросе".

Решит данную проблему можно двумя способами.

Если Вы не собираетесь передавать в ЧПУ ещё какие-либо параметры QueryString, например, article/23/?a=b, то Вам достаточно указать в правиле преобразования UrlRewrite параметр appendQueryString="false" (по умолчанию он имеет значение true):

<rules>
  <rule name="Article">
    <match url="^article/\d+$" />
    <action type="Rewrite" url="Article.aspx?article={R:1}" appendQueryString="false" />
  </rule>
</rules>

В таком случае к преобразованной строке не будут добавлены никакие другие параметры из QueryString.

Однако, если Вы предполагаете наличие каких-либо дополнительных параметров QueryString, то такой метод Вам не подойдет. В Вашем случае будет необходимо на каждой ASP.NET странице вручную поправить action формы на ЧПУ:

Form.Action = Request.RawUrl;

Задача упрощается, если Вы используете MasterPage. В таком случае вручную задать значение необходимо только в Page_Load мастера. Для этого необходимо назначить ID форме:

<form id="aspnetForm" runat="server">

Стоит отметить, что id должен быть задан обязательно только как aspnetForm. Это связано с тем, что стандартный скрипт JavaScript, встраиваемый при компиляции в ASP.NET страницу статично задан и не меняется в зависимости от Вами установленного id формы, что может привести к ошибкам на странице и неработающей половине функционала страницы.

Статья будет дополняться по мере знакомства с UrlRewrite. Следите за статьёй!

Полезности

Переиздание материалов статьи возможно только с обязательными ссылками на сайт http://2i2s.ru (в интернете - гиперссылка) и на автора

Читайте так же

  Проблемы со звуком. Нет звука. Хрипят колонки
Как устранить неполадки со звуком. Где искать драйвера на звук. Какие службы должны быть запущены.

  Как защитить себя от ICQ спама
Как настроить ICQ клиент, чтобы защититься от спамеров

  DC: Как раскрутить хаб DC
Способ раскрутить хаб DC, а так же повысить личный рейтинг и значимость на хабе