301 Перенаправление после сопоставления маршрута, но до выполнения контроллера

StackOverflow https://stackoverflow.com/questions/1203218

Вопрос

Я хотел бы добавить косую черту для любых URL, которые соответствуют действительному маршруту, но в настоящее время не заканчиваются косой чертой, т.е. www.example.com/url

После сопоставления URL-адреса с допустимым маршрутом, я хотел бы перенаправить 301 на тот же URL-адрес, но добавить косую черту, т.е. www.example.com/url /

Я провел некоторое время, изучая это, но я не могу понять это.

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

Надеюсь, это достаточно ясно, дайте мне знать, если вам нужно больше информации.

Это было полезно?

Решение

Я предполагаю, что вы пытаетесь удалить дублирующийся контент для целей SEO.

Скотт Хансельман говорит, что вы можете сделать это с помощью модуля перезаписи IIS7 (вы используете IIS7?). Его пост на http://www.hanselman.com/blog/ASPNETMVCAndTheNewIIS7RewriteModule.aspx описывает процесс.

Другие советы

Это звучит как идеально подходящий для фильтра действий:

public class EnforceTrailingSlashAttribute : ActionFilterAttribute
{
   public override void OnActionExecuting(ActionExecutingContext filterContext)
   {
      if (!filterContext.HttpContext.Request.Path.EndsWith("/"))
      {
         filterContext.Result = new RedirectResult(
            filterContext.HttpContext.Request.Path + "/");            
      }
   }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top