【问题标题】:How to Restrict Browser如何限制浏览器
【发布时间】:2011-11-16 07:58:36
【问题描述】:

我在 mvc3 中建立了一个站点,我想将我的站点限制在 firefox 上。

我的意思是说,当有人在 Firefox 上打开我的网站时,它会正确打开,但是当有人在 chrome 或 IE 上打开它时,它会出现自定义错误。我正在使用 c# 和 mvc3

【问题讨论】:

  • 在 IE 和 Chrome 中找到错误的根本原因不是更聪明吗?
  • 使用javascript检测用户的浏览器。 quirksmode.org/js/detect.html
  • 为什么要阻止网站在 Chrom 和 IE 中打开,这完全不利于用户体验。如果问题是该网站在 IE 或 Chrom 中看起来不太好,那么它应该是跨浏览器的错误修复

标签: c# javascript html asp.net-mvc-3


【解决方案1】:

您可以编写一个 global action filter 来测试 User-Agent HTTP 请求标头:

public class FireFoxOnlyAttribute : ActionFilterAttribute, IAuthorizationFilter
{
    public void OnAuthorization(AuthorizationContext filterContext)
    {
        var userAgent = filterContext.HttpContext.Request.Headers["User-Agent"];
        if (!IsFirefox(userAgent))
        {
            filterContext.Result = new ViewResult
            {
                ViewName = "~/Views/Shared/Unauthorized.cshtml"
            };
        }
    }

    private bool IsFirefox(string userAgent)
    {
        // up to you to implement this method. You could use
        // regular expressions or simple IndexOf method or whatever you like
        throw new NotImplementedException();
    }
}

然后在 Global.asax 中注册这个过滤器:

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new HandleErrorAttribute());
    filters.Add(new FireFoxOnlyAttribute());
}

【讨论】:

    【解决方案2】:

    您正在寻找连接到您网站的用户的用户代理,可以通过您的控制器中的此调用来检索该用户代理:

    Request.UserAgent

    不过,我并不同意这种模式。

    【讨论】:

      【解决方案3】:

      这是一个简单的 javascript 函数,您可以添加到代码中并执行相应的操作。

      function detect_browser() {
          var agt=navigator.userAgent.toLowerCase();
          if (agt.indexOf("firefox") != -1) return true;
          else{
              window.location="";//Here within quotes write the location of your error page.
          }
      }
      

      在主页上,您可以在页面加载事件中调用该函数。虽然不推荐这种做法。

      【讨论】:

        【解决方案4】:

        您可以测试 Request.UserAgent 作为路由约束的一部分。

        例如,您可以如下定义路由约束例程:

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

        然后将以下约束添加到路由:

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional }, //Parameter defaults
            new { customConstraint = new UserAgentConstraint("Firefox") } //Constraint
        );
        

        【讨论】:

          猜你喜欢
          • 2010-12-02
          • 1970-01-01
          • 1970-01-01
          • 2017-09-21
          • 2012-09-25
          • 2019-06-28
          • 2010-12-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多