301 Перенаправление после сопоставления маршрута, но до выполнения контроллера
-
05-07-2019 - |
Вопрос
Я хотел бы добавить косую черту для любых 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 + "/");
}
}
}