Как добиться динамических имен файлов страниц в ASP.NET?

I would like my website to create search-engine-optimized links for dynamic content (instead of locating data via the querystring). So:

mysite/SomeModifiableNname.aspx
instead of

mysite/DynamicContent.aspx?entryID=2345
.

Помимо умного обработчика 404, который перенаправляет запросы, или настраиваемого обработчика mime-типа в IIS, есть ли хорошее решение для этого в ASP.NET?
Помните, что имя файла страницы должно иметь возможность изменять во время выполнения.


person Colin    schedule 20.01.2009    source источник
comment
См. stackoverflow.com/questions/2262/asp-net-url-rewriting   -  person Ishmael    schedule 20.01.2009


Ответы (4)


arrow_upward
3
arrow_downward

Вы можете использовать HttpHandler, как показано на здесь.

person Larsenal    schedule 20.01.2009

arrow_upward
2
arrow_downward

это обширная тема, которую обычно называют перезаписью URL ...

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

Вероятно, вам также следует изучить возможности маршрутизации URL-адресов, которые были разработаны для MVC и доступны в ASP.NET 3.51.

ОБНОВЛЕНИЕ: Хотел бы я знать больше о ваших намерениях. Это последнее предложение меня смущает.

person alex    schedule 20.01.2009

arrow_upward
0
arrow_downward

Раньше я делал это с помощью UrlRewrite.Net. Для этого также есть встроенное средство в IIS7.

person Jason    schedule 20.01.2009

arrow_upward
0
arrow_downward

Спасибо за все мысли. Обладая предоставленной информацией, я нашел то, что считаю нужным мне решением:

В Global.asax (или через HttpModule) прослушайте событие BeginRequest и примените Context.Rewrite путь туда:

void Application_BeginRequest(object sender, EventArgs e)
{
    string fullOrigionalpath = Request.Url.ToString();

    if (fullOrigionalpath.ToLower().Contains("/Games".ToLower()))
    {
        Context.RewritePath("Default.aspx?id=Games");
    }

}

Затем в методе OnPreInit страницы, которая будет обрабатывать эти запросы, необходимо снова применить путь перезаписи, чтобы PostBacks работал должным образом:

protected override void OnPreInit(EventArgs e)
{
    base.OnPreInit(e);

    if (Request.QueryString["id"] == null)
        return;
    if (Request.QueryString["id"].ToLower().Equals("games"))
        Context.RewritePath("Games", "", "id=Games");
}

Ключ, который делает эту работу лучше, чем множество модулей перезаписи URL, с которыми я сталкивался, заключается в том, что пути могут быть динамическими. То есть созданные URL-адреса могут управляться данными.

person Colin    schedule 21.01.2009