使用Http Module response.redirect给出ERR_TOO_MANY_REDIRECTS

时间:2017-06-19 11:14:58

标签: asp.net-mvc http

在我的移动设备MVC网络应用中,我之前将用户重定向到m.example.com,效果很好。

现在我想重定向到仅适用于移动设备的特定网页,因为我的客户端不支付移动版费用,而且我的应用用户界面都是响应式的。

当重定向到下面的路径时,chrome会给出“太多重定向”的错误

example.com/User/NoMobile

我的Http模块如下所述

    public void Init(HttpApplication context)
    {
        context.BeginRequest += new EventHandler(BeginRequest);
    }

    private void BeginRequest(object sender, EventArgs e)
    {
        HttpApplication application = (HttpApplication)sender;
        HttpContext context = application.Context;

        //Page only for Mobile devices
        if (context.Request.Browser.IsMobileDevice)
        {
            context.Response.Redirect("https://www.example.com/User/NoMobile");
        }
    }

我在尝试的内容如下,使用动作/控制器

context.Response.Redirect("http://www.example.com/User/NoMobile");

我也试过平面的html页面:

context.Response.Redirect("http://www.example.com/FlatPage/MobileAppNotAvailable.html");

但是,我通过谷歌网站链接检查它工作正常。

context.Response.Redirect("https://www.google.com/doodles/about");

1 个答案:

答案 0 :(得分:1)

而不是HttpModule您可以创建BaseController并覆盖OnActionExecuting方法,如下所示:

public class BaseController : Controller
{
    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        //Here you put your logic
        if (filterContext.HttpContext.Request.Browser.IsMobileDevice)
        {
            filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "User", action = "NoMobile" })); 
            return;
        }
        base.OnActionExecuting(filterContext);
    }
}

然后只需从这个控制器继承所有控制器:

public class YourController : BaseController