在我的移动设备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");
答案 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