.NET MVC - 将Response设置为从属性重定向时要返回的内容

时间:2013-11-27 11:49:39

标签: c# asp.net-mvc redirect

我有一个属性[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(),但是我不喜欢代码的样子,因为我不清楚它是否会重定向客户端。有什么想法吗?

提前致谢!

1 个答案:

答案 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);
    }
}