2012-11-24 40 views
1

我創造了這個自定義路由類在ASP.NET MVC:重定向當用戶使用IE

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") 
    } 
    } 

上面的代碼工作prefectly,但當用戶使用IE時,我得到一個404錯誤。我想重定向到自定義頁面。我不想在Web.Config文件中使用自定義錯誤,因爲我的錯誤僅適用於IE。如何做到這一點?

感謝您的建議。

回答

4

這樣做的更好方法是使用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 
    { 

    } 

希望這個help.good運氣。