301 Перенаправление после сопоставления маршрута, но до выполнения контроллера - PullRequest
2 голосов
/ 30 июля 2009

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 04 августа 2010

Звучит как идеальный фильтр для действия:

public class EnforceTrailingSlashAttribute : ActionFilterAttribute
{
   public override void OnActionExecuting(ActionExecutingContext filterContext)
   {
      if (!filterContext.HttpContext.Request.Path.EndsWith("/"))
      {
         filterContext.Result = new RedirectResult(
            filterContext.HttpContext.Request.Path + "/");            
      }
   }
}
0 голосов
/ 30 июля 2009

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

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

...