Перезапись URL IIS - дружественный URL: переменная Querystring повторяется - PullRequest
3 голосов
/ 09 июля 2010

В моей конфигурации IIS 7 я создал удобные URL-адреса для преобразования:

http://mysite/restaurant.aspx?Name=SomeName 

в

http://mysite/SomeName

Для этого у меня есть следующие правила:

<rule name="RedirectUserFriendlyURL1" enabled="true" stopProcessing="true">
  <match url="^Restaurant\.aspx$" />
    <conditions>
      <add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" />
      <add input="{QUERY_STRING}" pattern="^Name=([^=&amp;]+)$" />
    </conditions>
  <action type="Redirect" url="{C:1}" appendQueryString="false" />
</rule>

<rule name="RewriteUserFriendlyURL1" enabled="true" stopProcessing="false">
  <match url="^([^/]+)/?$" />
    <conditions>
      <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
      <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
      <add input="{REQUEST_FILENAME}" pattern=".aspx" negate="true" />
    </conditions>
  <action type="Rewrite" url="Restaurant.aspx?Name={R:1}" appendQueryString="false" />
</rule>
  1. Кажется ли вышеупомянутое правильно для достижения того, что я пытаюсь?
  2. По какой-то причине на каждом постбеке я получаю:

    http://somesite/SomeName?Name=SomeName

Обратите внимание, что я установил appendQueryString в false.

1 Ответ

6 голосов
/ 01 сентября 2010

Действие обратной передачи формы использует базовый URL, а не необработанный URL.

Простое решение (я считаю, что свойство действия на стороне сервера доступно только в версии 3.5+):

protected void Page_Load(object sender, EventArgs e)
{
    if ( !String.IsNullOrEmpty(Request.ServerVariables["HTTP_X_ORIGINAL_URL"]) )
    {
        form1.Action = Request.ServerVariables["HTTP_X_ORIGINAL_URL"];
    }
}

http://blogs.iis.net/ruslany/archive/2008/10/23/asp-net-postbacks-and-url-rewriting.aspx

...