从OnActionExecuting重定向到外部URL?

Cal*_*min 5 asp.net-mvc redirect url-redirection

我需要从OnActionExecuting方法重定向到外部网址(例如“ www.google.com”)。现在我正在使用这样的东西:

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    if (!HttpContext.Current.User.Identity.IsAuthenticated)
    {
        var redirectUrl = "www.google.com";

        try
        {
            var isAjaxRequest = filterContext.HttpContext.Request.IsAjaxRequest();

            if (isAjaxRequest)
            {
                filterContext.HttpContext.Response.StatusCode = SessionController.CustomHttpRedirect;
                filterContext.HttpContext.Response.StatusDescription = redirectUrl;

                filterContext.Result = new JsonResult
                {
                    Data = new { Redirect = redirectUrl },
                    JsonRequestBehavior = JsonRequestBehavior.AllowGet
                };
            }
            else
            {
                filterContext.Result = new RedirectResult(redirectUrl, true);

            }

                return;
            }
            else
            {
                throw new LoggedOutException();
            }
        }
        catch
        {
            throw new LoggedOutException();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

问题在于它没有将我重定向到“ www.google.com”,而是将其重定向到“ http:// localhost:1234 / www.google.com ”(我在本地尝试)。有什么办法解决这个问题?谢谢

Cal*_*min 5

问题很容易解决:

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    if (!HttpContext.Current.User.Identity.IsAuthenticated)
    {
        var redirectUrl = "http://www.google.com";

        try
        {
            var isAjaxRequest = filterContext.HttpContext.Request.IsAjaxRequest();

            if (isAjaxRequest)
            {
                filterContext.HttpContext.Response.StatusCode = SessionController.CustomHttpRedirect;
                filterContext.HttpContext.Response.StatusDescription = redirectUrl;

                filterContext.Result = new JsonResult
                {
                    Data = new { Redirect = redirectUrl },
                    JsonRequestBehavior = JsonRequestBehavior.AllowGet
                };
            }
            else
            {
                filterContext.Result = new RedirectResult(redirectUrl, true);

            }

                return;
            }
            else
            {
                throw new LoggedOutException();
            }
        }
        catch
        {
            throw new LoggedOutException();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我所要做的就是当我将值分配给“redirectUrl”时,我让你把 http 放在 wwww 之前。如果您使用 SSL 连接并且您尝试从 mvc 重定向到另一个域,则必须放置此选项。


Ala*_*Ala 1

而不是使用:

filterContext.Result = new RedirectResult("www.google.com", true);
Run Code Online (Sandbox Code Playgroud)

请尝试以下操作:

filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Home", action = "External" , ReturnURL = "www.google.com"}));
Run Code Online (Sandbox Code Playgroud)

并在您的(主)控制器中创建一个名为(外部)的操作,并从那里重定向到您的外部网址:

 public class HomeController : Controller
        {
[AllowAnonymous]
         public ActionResult External(string ReturnURL){
           return Redirect(ReturnURL);
        }
    }
Run Code Online (Sandbox Code Playgroud)

您无法直接从 ajax 响应执行服务器端重定向。但是,您可以返回带有新 url 的 JsonResult 并使用 javascript 执行重定向。看到这个答案