Как переписать URL с помощью перезаписи URL ASP.NET 4.0? - PullRequest
2 голосов
/ 08 января 2012

У меня есть сборка приложения в ASP.NET 4.0. И мне нужно переписать URL-адрес с помощью класса перезаписи URL-адреса в файле Globax.asax или с расширением перезаписи URL-адреса Microsoft в IIS 7 или IIS 7.5

Пример.

У меня есть динамически созданный URL, который, к сожалению, я не могу изменить, потому что это сторонний контроль.

http://sitename.com/store/description/product?table=page2

Мне нужно переписать его на

http://sitename.com/store/description/product?id=2

Ответы [ 3 ]

2 голосов
/ 08 января 2012

Это пример , который я нашел, когда мне нужно было что-то переписать, чтобы подделать идею о поддомене. Следующий код обычно помещается в ваш файл web.config и также может быть настроен через IIS7 Management Studio.

<system.webServer>
 <validation validateIntegratedModeConfiguration="false"/>
 <modules runAllManagedModulesForAllRequests="true"/>
  <rewrite>
   <rules>
     <clear />
    <!-- Ameritexintl Website Publisher -->
  <rule name="ameritexintl-Web-publisher" enabled="true" stopProcessing="true">
       <match url="(.*)" />
       <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
         <add input="{HTTP_HOST}" pattern="^www\.publisher\.ameritexintl\.com$" />
       </conditions>
       <action type="Redirect" url="http://publisher.ameritexintl.com/{R:0}" />
     </rule>

    <rule name="ameritexintl-Web-publisher-rewrite" enabled="true" stopProcessing="true">
       <match url="(.*)" />
       <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
         <add input="{HTTP_HOST}" pattern="^(www\.)?publisher\.ameritexintl\.com$" />
         <add input="{PATH_INFO}" pattern="^/publisher/($|/)" negate="true" />
       </conditions>
       <action type="Rewrite" url="/publisher/{R:0}" />
     </rule>
   </rules>
 </rewrite>
 <urlCompression doStaticCompression="true" doDynamicCompression="true" />

В основном происходит то, что, когда запрошенный URL-адрес проходит через IIS, он сопоставляет шаблон с путем и сравнивает его с любыми правилами перезаписи, которые он имеет для сайта. Если URL-адрес совпадает с шаблоном, IIS затем перепишет URL-адрес в соответствии с правилом и протолкнет запрос на выполнение с новым URL-адресом.

Я успешно использую это на нескольких сайтах, и это работает довольно хорошо для меня.

В этом примере есть серия снимков экрана, на которых будет выглядеть диалоговое окно IIS, когда вы проходите и настраиваете свои правила перезаписи URL.

Надеюсь, что это поможет, и удачи в вашем проекте.

1 голос
/ 08 января 2012

@ Евгений, тебе нравится использовать IIS_ISAPI?если да, вы можете попробовать этот Ionics Isapi Rewrite Filter

, если нет, вы можете использовать этот модуль перезаписи URL. Intelligencia.UrlRewriter

ни, Если вы хотите написать собственный код, вам необходимо реализовать метод httpModule interface и HttpContent.RewritePath.

, например:

public sealed class RewriterHttpModule : IHttpModule
    {
    private static RewriterEngine _rewriter = new RewriterEngine();

    public void Dispose()
    {
    }

    public void Init(HttpApplication context)
    {
        context.BeginRequest += new EventHandler(BeginRequest);
    }

    private void BeginRequest(object sender, EventArgs e)
    {
       var context=((HttpApplication)sender).Context;
       string path = context.Request.Path;
       /*
         url rewrite list: 
          Dictionary<string,string>
       */
        Dictionary<string, string> urls = new Dictionary<string, string>();
        urls.Add(@"/store/description/product?table=page(\d+)", "/store/description/product?id=$1");
        foreach (var pair in urls)
        {
            if (Regex.IsMatch(path, pair.Key))
            {
                var newUrl = Regex.Replace(path, pair.Key, pair.Value);
                //rewrite url
                context.RewritePath(newUrl, false);
            }
        }
    }
}
1 голос
/ 08 января 2012

Попробуйте это:

string data = @"http://sitename.com/store/description/product?table=page2";
string pattern = @"(table)(?:=)([^\d]+)";

Console.WriteLine ( Regex.Replace(data, pattern, "id="));

// Result
// http://sitename.com/store/description/product?id=2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...