【问题标题】:Better place to detecting mobile browser and redirect to mobile site检测移动浏览器并重定向到移动站点的更好位置
【发布时间】:2012-09-21 18:39:49
【问题描述】:

任何人都可以建议我验证移动浏览器并重定向到移动网站的更好地方吗?

我正在考虑使用DetectMobileBrowsers 来验证移动浏览器。

我正在考虑在Application_StartSession_Start 中执行此操作。请建议我在哪个地方做同样的事情更好。

这是我的 Session_Start 块

Protected Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
    ' Fires when the session is started
    'Dim request As HttpRequest = HttpContext.Current.Request
    'If request.Browser.IsMobileDevice Then
    '    Response.Redirect("http://localhost:26270/Default.aspx")
    'End If
    Response.Redirect("http://google.com")
End Sub

谢谢

【问题讨论】:

  • 在服务器而不是客户端上执行此操作肯定更好,因此您可以删除javascriptjquery,但您使用的是WebForms 还是MVC? MVC 实际上使为移动平台提供不同视图变得非常容易。

标签: c# asp.net


【解决方案1】:

不要使用Response.Redirect("http://m.yoursite.com"),最好使用 2 行,它会暂时将您重定向到移动版本。最好使用:

Response.Status="302 Moved Temporarily"
Response.AddHeader "Location","http://m.yoursite.com"

【讨论】:

    【解决方案2】:

    您可能应该将它放在Session_Start 中,因为一旦建立会话,设备将保持不变,当用户第一次访问该站点时,该会话将被称为触发。

    只需谷歌并阅读它..

    仅供参考,Application_Start 在应用程序域的生命周期内调用一次,并且每次创建新会话时都会引发 Session_Start 事件。

    阅读应用程序生命周期将帮助您更好地了解所有这些事件。

    【讨论】:

    • 是 Session_Start 将在应用程序第一次加载或用户登录应用程序时或第一次使用会话对象时调用。我的 global.asax 中有 Session_start,但是当我的应用程序第一次加载时它没有被调用。
    • 第一次加载应用程序时不会调用 session_start。当用户第一次访问您的站点时会调用 session_start。它与访问 Session 对象无关。跨度>
    • 我不确定为什么我的应用程序中没有调用 Session_Start。我的 Session_start 中有断点,但未调用此事件。
    • 不是...我可以调试其他事件,例如 Application_Start、Application_BeginRequest 但不能调试 Session_Start
    【解决方案3】:

    考虑 Application_BeginRequest。请务必检查请求 Url 是您请求的页面,这样您就不会对请求的每个静态文件进行检查。

    void Application_BeginRequest(object sender, EventArgs e)
    {
       var u = Request.ServerVariables("HTTP_USER_AGENT");
       var uri =  Request.Url.AbsoluteUri.ToLower();
       if (url.Contains(".aspx"))
       {
          //put DetectMobileBrowsersCode Here
    
          if (b.IsMatch(u) || v.IsMatch(Left(u, 4)))
          {
              Response.Redirect("http://m.yoursite.com");
          } 
       }   
    }
    

    【讨论】:

    • 我最初也是这么想的,但问题是一旦用户访问该站点,继续将他的所有请求重定向到 m.yoursite.com 或继续检查他的 user_agent 是没有意义的。 . 检查一次可能是有意义的,这就是 session_start 出现的地方..
    • @Baz1nga 是的,这可能不是最优的。但是如果只使用 session_start 检查,如果已经被重定向的移动用户最终从主站点请求页面并且会话仍然处于活动状态,该怎么办。 session_start 不会执行,用户也不会被重定向。
    • 在这种情况下你需要考虑一种替代方法,但我认为在 aoplication_beginrequest 中处理它并不是最佳的,因为它需要所有请求的资源
    • 但是如果用户这样做,他的意思是他想要正常的资源,如果我们现在提供移动版本,那可能违背他的意愿
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    相关资源
    最近更新 更多