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 ”(我在本地尝试)。有什么办法解决这个问题?谢谢
问题很容易解决:
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 重定向到另一个域,则必须放置此选项。
而不是使用:
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 执行重定向。看到这个答案
| 归档时间: |
|
| 查看次数: |
6131 次 |
| 最近记录: |