惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google Online Security Blog
Google Online Security Blog
博客园_首页
酷 壳 – CoolShell
酷 壳 – CoolShell
Jina AI
Jina AI
博客园 - Franky
大猫的无限游戏
大猫的无限游戏
Hugging Face - Blog
Hugging Face - Blog
博客园 - 司徒正美
V
V2EX
雷峰网
雷峰网
云风的 BLOG
云风的 BLOG
V
Visual Studio Blog
F
Full Disclosure
Y
Y Combinator Blog
V
V2EX - 技术
Attack and Defense Labs
Attack and Defense Labs
S
Security @ Cisco Blogs
Schneier on Security
Schneier on Security
Microsoft Azure Blog
Microsoft Azure Blog
SecWiki News
SecWiki News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
The GitHub Blog
The GitHub Blog
量子位
PCI Perspectives
PCI Perspectives
S
Secure Thoughts
D
Darknet – Hacking Tools, Hacker News & Cyber Security
AWS News Blog
AWS News Blog
Blog — PlanetScale
Blog — PlanetScale
爱范儿
爱范儿
K
Kaspersky official blog
B
Blog
A
Arctic Wolf
Hacker News: Ask HN
Hacker News: Ask HN
L
LangChain Blog
T
Tor Project blog
P
Privacy & Cybersecurity Law Blog
Recent Announcements
Recent Announcements
宝玉的分享
宝玉的分享
The Register - Security
The Register - Security
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
L
Lohrmann on Cybersecurity
D
Docker
A
About on SuperTechFans
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Google DeepMind News
Google DeepMind News
The Last Watchdog
The Last Watchdog
S
Security Affairs
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Privacy International News Feed
Simon Willison's Weblog
Simon Willison's Weblog

博客园 - 小罗

学习CRYPTO C#中使用网络函数 (第一部分 用户函数)[翻译] C#图片处理类 在WINCE或Mobile下面获取当前目录 (翻译)从底层了解ASP.NET体系结构 采用HttpModules来重写URLs 使用会话状态(一) 小技巧:ASP.NET中编程杀死进程 - 小罗 - 博客园 ASP.NET—From验证:全部代码及讲解 ASP.NET如何存取 SQLServer数据库图片 ASP.NET基本编程习惯 用asp.net还原与恢复sqlserver数据库 Session丢失原因与解决方案小结 小心!目录删除及重命名操作,一定丢失Session~~ C# 文件操作(上传 下载 删除 文件列表...) 40 种网页技巧 过滤ASP.NET输出HTML中的无用空格 在ASP.NET中创建安全的web站点(配置) ASP.NET Forums 页面模型分析
ASP.NET 2.0移动开发之定义设备筛选器
小罗 · 2008-01-19 · via 博客园 - 小罗

在一个ASP.NET移动页面中使用DeviceSpecific/Choice构造时,你必须定义设备筛选器来测试 MobileCapabilities对象的属性。你可以在应用程序的Web.Config文件的<deviceFilters>节点中定义设备筛选器, 其中每个<filter>元素就是一个设备筛选器。下面是定义设备筛选器的语法:
  
  
  <system.web>
  <deviceFilters>
  <filter
  name="filterName"
  compare="capabilityName"
  argument="comparisonString"/>
  <filter
  name="filterName"
  type="className"
  method="methodName"/>
  </deviceFilters>
  </system.web>
  
     如上述代码所示,存在两个<filter>元素。它分别代表两种不同类型的筛选器,分别为基于比较的筛选器和基于鉴别委托的筛选器。语法指定了这两种筛 选器类型。第一种称为基于比较的筛选器,可在运行时将开发人员指定的值与设备功能的当前值进行比较。当希望确定设备是否支持某特定功能时,可使用此类筛选 器。它的各个属性为:
  
  属性 说明
  name 必需的String属性,指定设备筛选器的名称。注意,在设置该属性时要注意它是区分大小写的。例如,isHTML和IsHTML代表不同的设备筛选器。
  compare 它包含设备筛选器计算的属性。
  argument 指定该功能应与之比较的参数。如果未提供任何参数,则将 null 用于比较。
  
     下面来定义一个简单的基于比较的筛选器,你完全可以在一个<deviceFilters>元素中定义基于比较的筛选器,而无需额外的代码。例如,我们可 以添加一个用来测试某个移动设备是否支持HTML 3.2的设备筛选器,你仅需在Web.Config配置文件中添加如下的代码:
  
  <system.web>
  <deviceFilters>
  <filter name="isHTML32" compare="PreferredRenderingType" argument="html32">
  </filter>
  </deviceFilters>
  </system.web>
  
     上面的代码定义了一个名为isHTML32的筛选器,它用来测试MobileCapabilities对象的 PreferredRenderingType属性是否等于html32。除了在DeviceSpecific/Choice构造中使用上面的筛选器外, 你还可以通过使用MobileCapabilities对象的HasCapability方法来评估设备功能,此方法供ASP.NET内部使用,用来实现 用控件语法表达的各种设备选择条件。如下面的代码所示,它也是用来查看该移动设备是否支持HTML3.2标记语言,如果设备具有指定的功能,则返回值为 true,否则为false。注意,如果是基于比较的筛选器,HasCapability方法的第二个参数为null。
  
  MobileCapablities cap = (MobileCapabilities)Request.Browser;
  if ((cap.HasCapability ("isHTML32", null))
  {
  // Do something.
  }
  
    提 示:当你使用Visual Studio创建一个ASP.NET Web移动应用程序时,在添加的移动Web.Config配置文件中将包含大量的基于比较的筛选器。这些筛选器包括isWML11、isHTML32、 isCHTML10。你可以打开该配置文件,查看所有的可用设备筛选器。
  
  第二类设备筛选器称为基于鉴别委托的筛选器。当需要比基于比较的筛选器更为复杂的设备筛选功能时,可以通过提供方法的类名称和方法名称,指定基于鉴别委托的筛选器。在运行时,调用提供的方法来确定设备筛选器的计算结果是否为true。该筛选器的属性为:
  
  
  属性 说明
  name 筛选器的名称
  type 它是提供鉴别委托的类类型。名称必须符合指定完全限定类型名的Microsoft .NET标准。ASP.NET在指定的程序集中搜索该类型。
  method 它是类type上方法的名称,该方法根据传递给它的MobileCapabilities实例返回一个布尔值指示当前的设备是否满足此筛选器。
  
     现在我们来定义一个基于鉴别委托的筛选器,首先我们需要创建一个类库项目,编写和该筛选器相关的类及方法,经过编译后,再在ASP.NET Web移动应用程序中引用包含该类的程序集,具体的实现将在后面用实例进行详细的介绍。下面是类中的静态方法的具体形式(第二个参数是可选的,你可以将该 参数作为额外的输入信息添加到上面的静态方法中):
  
  public static bool MethodName
  (System.Web.Mobile.MobileCapabilities capabilities, String param)
  
     在Web.Config配置文件中,你可以采用<filter>元素的第二种形式定义基于鉴别委托的筛选器。例如,你创建了一个名为 isMMEonSony的筛选器,该筛选器使用了MyClass类中的一个名为MMEandSony的静态方法,而且该类的命名空间是 MyEvaluators.dll程序集里的MyNameSpace。因此我们需要在移动Web.Config配置文件中编写如下的代码:
  
  <system.web>
  <deviceFilters>
  <filter name="isMMEonSony"
  type="MyNameSpace.MyClass, MyEvaluators.dll"
  method="MMEandSony">
  </filter>
  </deviceFilters>
  </system.web>
  
    在上述配置中我们设置type属性为该类的完整名称:命名空间.类名,程序集。而method属性的属性值为运行时调用的实际的方法名。
  
    在DeviceSpecific/Choice构造中使用一个基于鉴别委托的筛选器和在DeviceSpecific/Choice构造中使用一个基于比较的筛选器没有什么太大的区别,下面是使用基于鉴别委托的筛选器的代码片断:
  
  <mobile:Form id="Form1" runat="server">
  <mobile:Label id="Label1" runat="server" Text="Client is NOT MME on Sony">
  <DeviceSpecific>
  <Choice Text="Client is MME on Sony" Filter="isMMEonSony">
  </Choice>
  </DeviceSpecific>
  </mobile:Label>
  </mobile:Form>
  
     除了上面的方法外,你还可以在代码中使用MobileCapabilities.HasCapability方法来查看移动设备是否具备 isMMEonSony基于鉴别委托的筛选器的功能,如果设备具有指定的功能,则返回值为true,否则为false。在基于鉴别委托的筛选器这种情形 下,HasCapability方法的第二个参数是可选的,你可以为该参数设置一个有意义的String值。
  
    使用第二个参数的好处就 是你可以传递一些MobileCapabilities对象无法获取的移动设备信息到HasCapability方法中,例如我们知道HTTP文件头会传 送一些和移动设备相关的信息,我们可以使用System.Web.HttpRequest对象的属性获取移动设备的一些由 MobileCapabilities对象无法获取的其它信息。下面是具体的实现代码:
  
  if (((MobileCapabilities)Request.Browser).HasCapability(
  "isMMEonSony",
  Request.UserLanguages[0]))
  {
  // Do something.
  }