我有一个属性[RedirectSSL],在某些情况下可能会也可能不会将http请求重定向到相应的https请求:
[RedirectSSL]
public class ControllerA : Controller(){
public ActionResult MethodA()
{
if (SomeExpression)
return RedirectToAction("MethodB", "ControllerA");
return RedirectToAction("MethodC", "ControllerA");
}
public ActionResult MethodB()
{
return View();
}
public ActionResult MethodC()
{
return View();
}
}
此代码的问题在于,只要RedirectSSL属性在返回RedirectToAction()之前调用了Response的Redirect()方法,它就会抛出System.Web.HttpException。 solution是将重定向封装在
中if(!Response.IsRequestBeingRedirected){ ... }
但是如果评估为false,应该返回什么?我猜想会有一个EmptyResult(),但是我不喜欢代码的样子,因为我不清楚它是否会重定向客户端。有什么想法吗?
提前致谢!
答案 0 :(得分:1)
ActionFilter
可帮助您确定是否可以执行某项操作。您可以通过过滤器提供ActionResult
来完全绕过操作。
public class RedirectSSLAttribute:ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if(!filterContext.HttpContext.Request.IsSecureConnection)
{
filterContext.Result = new RedirectResult("your url");
return;
}
base.OnActionExecuting(filterContext);
}
}