Using an MVC Action Filter to catch redirects in Ajax requests and return a JsonResult

后端 未结 1 1579
借酒劲吻你
借酒劲吻你 2020-12-28 22:16

In my ASP.NET MVC 3 application, I have some action methods that can be invoked with Ajax and non-Ajax requests. The action methods may return a RedirectResult and I want th

相关标签:
1条回答
  • 2020-12-28 23:04

    Here's an example of how you could proceed:

    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        base.OnActionExecuted(filterContext);
    
        if (filterContext.HttpContext.Request.IsAjaxRequest())
        {
            string url = "/";
            var redirectResult = filterContext.Result as RedirectResult;
            if (filterContext.Result is RedirectResult)
            {
                // It was a RedirectResult => we need to calculate the url
                var result = filterContext.Result as RedirectResult;
                url = UrlHelper.GenerateContentUrl(result.Url, filterContext.HttpContext);
            }
            else if (filterContext.Result is RedirectToRouteResult)
            {
                // It was a RedirectToRouteResult => we need to calculate
                // the target url
                var result = filterContext.Result as RedirectToRouteResult;
                url = UrlHelper.GenerateUrl(result.RouteName, null, null, result.RouteValues, RouteTable.Routes, filterContext.RequestContext, false);
            }
            filterContext.Result = new JsonResult
            {
                Data = new { Redirect = url },
                JsonRequestBehavior = JsonRequestBehavior.AllowGet
            };
        }
        else
        {
            // TODO: It is not an AJAX request => do whatever you were doing
        }
    }
    
    0 讨论(0)
提交回复
热议问题