как перенаправить запросы ActionFilterAttribute с помощью строки запроса - PullRequest
0 голосов
/ 27 августа 2018

Я должен перенаправить любые запросы на канонические URL.Чтобы решить эту задачу, я использую производный ActionFilterAttribute, как показано ниже:

public class CheckToRedirectFilterAttribute : ActionFilterAttribute
{
    public bool ExactUrl { get; set; } = true;
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        base.OnActionExecuting(filterContext);

        ActionResult redirect = filterContext.RouteData.RedirectToNewMap();
        if (redirect == null && this.ExactUrl) {
            var urlHelper = new UrlHelper(filterContext.RequestContext);
            var routeValues = filterContext.RouteData.Values;
            foreach (var a in filterContext.ActionParameters)
            {
                if (!routeValues.ContainsKey(a.Key))
                    routeValues.Add(a.Key, a.Value);
            }
            var canonicUrl = urlHelper.Action(filterContext.ActionDescriptor.ActionName, filterContext.ActionDescriptor.ControllerDescriptor.ControllerName, filterContext.RouteData.Values);
            if (filterContext.HttpContext.Request.RawUrl.ToLower() != canonicUrl)
                redirect = new RedirectResult(canonicUrl.ToLower());
        }
        if (redirect != null)
        {
            filterContext.Result = redirect;
        }
    }
}

А затем я использую этот атрибут в методах действия:

public class HomeController : Controller
{
    [CheckToRedirectFilter]
    public ActionResult Index()
    {
        return View();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...