1

我在 ASP.NET MVC 中创建了这个自定义路由类:

public class UserAgentConstraint:IRouteConstraint {
  private string RequiredUserAgent;
  public UserAgentConstraint(string agentParam) {
    RequiredUserAgent = agentParam;
  }
  public bool Match(HttpContextBase httpContext, Route route, string parameterName,
    RouteValueDictionary values, RouteDirection routeDirection) {
    return httpContext.Request.UserAgent != null && !httpContext.Request.UserAgent.Contains(RequiredUserAgent);
  }
}

在 Global.asax.cs 中:

public static void RegisterRoutes(RouteCollection routes) {
  routes.MapRoute("myRoute2", "{controller}/{action}/{Id}",
    new { controller = "home", action = "index", Id = UrlParameter.Optional }, new {
      customConstriant=new UserAgentConstraint("IE")
    }
  }

上面的代码运行良好,但是当用户使用 IE 时,我得到一个 404 错误。我想重定向到自定义页面。我不想在Web.Config文件中使用自定义错误,因为我的错误仅适用于 IE。怎么能做到这一点?

谢谢你的建议。

4

1 回答 1

5

一个更好的方法是使用 ActionFilter。

    public class BrowserFilterAttribute : ActionFilterAttribute 
    {
        public string [] _browserNames { get; set; }
        public AssetIdFilterAttribute(params string [] browserNames)
        {
            _browserNames= browserNames;
        }


        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {            
            //get browser name from somewhere
            string currentBrowser  = filterContext.HttpContext.Request.Browser.Browser;
            if(_browserNames.Contains(currentBrowser))
                filterContext.Result = new RedirectResult("your URL");
        }

    }

你可以像这样在控制器级别应用它:

  [BrowserFilter("IE","Opera","SomeOtherBrowser")]
  public class BrowserAwareController() : Controller
  {

  } 

希望这有帮助。祝你好运。

于 2012-11-24T07:29:23.957 回答