Настройте asp.net mvc hocalhost/Products.aspx на hocalhost/Products

#asp.net-mvc-3 #asp.net-mvc-routing

#asp.net-mvc-3 #asp.net-mvc-routing

Вопрос:

Как настроить asp.net маршрутизация mvc для постоянного перенаправления 301

hocalhost/Products.aspx и hocalhost/Search.aspx

Для

hocalhost/Продукты и hocalhost/Поиск

т.е. удалить расширение .aspx из пути?

Ответ №1:

Что-то в этом роде должно сработать. Проложите следующий маршрут:

 routes.MapRoute("Redirect route", "{file}.aspx", 
    new { controller = "home", action = "redirect" });
  

И определите Redirect действие в вашем контроллере:

 public ActionResult Redirect()
{
    // use Request.RawUrl, for instance to parse out what was invoked

    // this regex will extract anything between a "/" and a ".aspx"
    var regex = new Regex(@"(?<=/). (?=.aspx)", RegexOptions.Compiled);
    var action = regex.Match(Request.RawUrl);

    return RedirectToActionPermanent(action.Value);
}
  

Вы могли бы перенаправить обе aspx страницы на один и тот же маршрут перенаправления и определить, какой файл на самом деле был вызван путем синтаксического анализа HttpContext.Request.RawUrl (хотя для этого последнего пункта может быть лучший способ).

Обновить

Действительно, есть более простой способ, как выяснил сам @alex. Чтобы получить файл в исходном запросе, просто выполните:

 string file = RouteData.Values["file"].ToString();
  

Комментарии:

1. Это работает, спасибо. Но нам нужно более общее решение, поскольку. страниц aspx может быть много.

2. @alex — как насчет использования параметра в определении url? Я обновил свой ответ, чтобы отразить то, что я имею в виду.

3. @alex — Я только что попробовал этот маршрут, и он сработал: я установил точку останова в Redirect методе, и он прерывается там для каждого запроса .aspx, который я делаю . Я также добавил предложение о том, как разобрать Request.RawUrl . Когда вы говорите, что это не работает, вы получаете какую-либо ошибку?

4. @alex — Готово. Я также исправил регулярное выражение; у меня там была опечатка.

5. Я не могу понять, но Support.aspx не входит в действие перенаправления 🙁