Как добиться динамических имен файлов страниц в 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)


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

person Larsenal    schedule 20.01.2009

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

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

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

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

person alex    schedule 20.01.2009

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

person Jason    schedule 20.01.2009

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

В 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