我正在编写一个vb.net svg工作流查看器,但需要进行浏览器检测以查看是否应恢复为VML或是否支持SVG。我们的目标浏览器是IE,我知道要在VB中检测浏览器版本,您可以执行以下操作:
Dim myBrowserCaps As System.Web.HttpBrowserCapabilities = Request.Browser
If (CType(myBrowserCaps, System.Web.Configuration.HttpCapabilitiesBase)).Browser.ToUpper().IndexOf("IE") >= 0 Then
labelText = "Browser is Internet Explorer."
Else
labelText = "Browser is not Internet Explorer."
End If
或类似的东西。
问题是,虽然我可以直接从我的.aspx页面检测浏览器和UserAgent字符串,但是当我将相同的代码放入页面上的webpart所引用的类时(是webpart,它是一个遗留产品) )我收到一个错误。 webpart被很多页面引用,这就是我希望在类中而不是在页面上检测浏览器的原因。
Dim Browser As HttpBrowserCapabilities = Request.Browser
If Browser.Browser = "IE" Then
'IE Junk
End If
错误只是"'Request' is not declared. It may be inaccessible due to its protection level".
此代码直接从MSDN文档中复制,在我的生活中,我无法找到解释如何或是否可以从类中执行此操作的任何地方。我浏览器Stack,我也浏览了他们的文档无济于事。
我已经尝试了HttpRequest.Browser
,但这让我无处可去。
所以,我的两个问题是......
修改
最初我曾尝试使用当前的上下文,但我做错了。 我试过了:
Dim browser as HttpBrowserCapabilities = HttpContext.Request.Browser
应该是:
Dim browser as HttpBrowserCapabilities = HttpContext.Current.Request.Browser
所以我在语法上(并在理解中)是错误的
我认为这个问题可能仍然有用,因为我无法在其他任何地方找到它。
感谢所有人!
答案 0 :(得分:2)
Per SLaks注释,必须传入HttpContext才能从请求中访问浏览器。我最终使用了。
Dim context As HttpContext = HttpContext.Current
Dim Browser As HttpBrowserCapabilities = context.Request.Browser