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 に答える