从 UserAgent 字符串创建 HttpBrowserCapabilityBase

2024-02-21

So the Http请求库 http://msdn.microsoft.com/en-us/library/system.web.httprequestbase.aspx类有一个浏览器属性 http://msdn.microsoft.com/en-us/library/system.web.httprequestbase.browser.aspx返回一个Http浏览器功能库 http://msdn.microsoft.com/en-us/library/system.web.httpbrowsercapabilitiesbase.aspx。目前,我们在一些 MVC 基础结构代码中使用此属性来获取浏览器名称和版本号(用于输出到日志)等信息。

我们还有一个 api 使用服务栈 http://www.servicestack.net/,我希望能够将其连接到我们现有的基础设施中。唯一缺少的是能够从 UserAgent 标头中解析浏览器名称和版本(感谢 IHttpRequest.UserAgent),但需要一种方法来解析它。

我的问题 - 是否可以仅使用 UserAgent 字符串以某种方式创建 HttpBrowserCapabilityBase?我在 msdn 上看到的唯一可用的子类型是HttpBrowserCapability 包装器 http://msdn.microsoft.com/en-us/library/system.web.httpbrowsercapabilitieswrapper.aspx,其唯一的成员是另一个 HttpBrowserCapabilityBase。

我在想这个类可能只是解析 UserAgent 字符串,那么为什么没有 ctor(string) 呢?是否有我没有看到的子类型、工厂或静态方法可以完成此任务?

一般来说,我这样做只是为了懒惰 - 当我知道 .Net 具有这种功能时,我不想编写/查找另一个 UserAgent 解析器,他们只是隐藏它。


我只得自己做这件事。这是我尝试过的。它反编译自System.Web,但仍然依赖于该库。我仍在测试它,但也许它对你有帮助:

public class BrowserCapabilities
{

    public static HttpBrowserCapabilities 
        GetHttpBrowserCapabilities(NameValueCollection headers, string userAgent)
    {
        var factory = new BrowserCapabilitiesFactory();
        var browserCaps = new HttpBrowserCapabilities();
        var hashtable = new Hashtable(180, StringComparer.OrdinalIgnoreCase);
        hashtable[string.Empty] = userAgent;
        browserCaps.Capabilities = hashtable;
        factory.ConfigureBrowserCapabilities(headers, browserCaps);
        factory.ConfigureCustomCapabilities(headers, browserCaps);
        return browserCaps;
    }
}

To test:

var features = BrowserCapabilities.GetHttpBrowserCapabilities(null, 
    "Mozilla/4.0    (compatible; MSIE 7.0; Windows NT 6.0)");
Console.WriteLine(features.Browser);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 UserAgent 字符串创建 HttpBrowserCapabilityBase 的相关文章

  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • 有没有办法使用 ASP.NET 在用户离开页面时始终运行某些服务器端代码?

    我想知道当用户离开 ASP NET 中的页面时是否有任何方法可以始终运行一些服务器端代码 页面卸载事件不好 因为如果有人单击链接 则不会调用该事件 理想情况下 即使用户关闭浏览器 我也希望代码能够运行 我怀疑我所问的问题是不可能的 但问一下
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • 使用.Net/C# 计算集合的频率分布

    是否有一种快速 简单的方法来使用 Linq 或其他方式计算 Net 集合的频率分布 例如 任意长的 List 包含许多重复项 遍历列表并计算 跟踪重复次数的巧妙方法是什么 查找列表中重复项的最简单方法是将其分组 如下所示 var dups
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么

随机推荐

  • Alt+Enter 停止在 IntelliJ 中处理 Dart 文件

    构建 Flutter 应用程序时ALT Enter键盘快捷键非常方便 不仅可以调出快速修复 还可以调出弹出菜单来包装 删除小部件 在我跑步之前它工作得很好flutter upgrade并更新了 IntelliJ 中的 Dart 和 Flut
  • 如何测试Oracle目录的读/写文件系统权限?

    假设您创建一个目录 例如 CREATE OR REPLACE DIRECTORY EXT DATA FILES AS data ext data files GRANT READ WRITE ON DIRECTORY SYS EXT DAT
  • Delphi中GetLastError和FormatMessage的正确用法是什么?

    我在 Delphi 2006 也是 Delphi 7 中使用第三方组件时遇到问题 在执行对该组件的函数调用时出现 未指定错误 您是否有在 Delphi 中使用 GetLastError 和 FormatMessage 的示例代码 这将允许我
  • ASP.Net MVC 4 的 WebAPI 未正确绑定复选框?

    我正在将 WebAPI 合并到我的开发中 并将所有表单提交发布到 WebAPI 控制器 我注意到复选框没有正确绑定到模型 我有一个表格使用 Html CheckBoxFor m gt m HasVideo 它生成一个复选框和一个隐藏的表单元
  • 反应式表单,检查用户名是否存在

    我在 Ionic Firebase 中遇到问题 验证器的值采用反应形式 特别是我有下面的这 2 个函数 用于检查 firebase 实时数据库中的用户名是否存在 这两个函数返回 Promise 布尔值 export class Userna
  • 以编程方式更改 IE 设置

    我正在尝试制作一个 Windows 应用程序 将 URL 添加到 IE 的 受信任站点 中 这部分有效 解决方案 http www nakov com blog 2009 05 15 c code for changing internet
  • PySimpleGUI 滑块有小数范围吗?

    我需要某种方法来在 PySimpleGUI 中的滑块上方显示十进制值 我已经尝试过输入十进制值 但是当我这样做时它会抛出错误 import PySimpleGUI as sg layout sg Slider range 850 999 d
  • 将 AjaxOnlyAttribute 和 ChildActionOnlyAttribute 组合到一个操作过滤器中

    我希望能够在控制器上标记一个动作 以便通过 ajax 调用和 RenderAction 来调用 问题在于这两个属性派生或实现不同的抽象 一种出路是下一个 AjaxOnly PartialViewResult GetViewAjax int
  • 当不使用字符串操作时,GCC 11 给出 -Wstringop-overflow

    这是我的代码 test c include
  • Swift 中的纯类协议

    我希望我的一些课程 不是全部 符合使用 仅限类的协议 https developer apple com library ios documentation Swift Conceptual Swift Programming Langua
  • 使用 MS Access 中的 GUID pk 插入 SQL Server 表

    我正在将数据库从 Access 后端迁移到 SQL Server 后端 同时保留 Access 前端 其中一张表设置了其 PK 的复制 ID 作为 Access DB 我们可以将值插入到该表中 而无需引用 PK 字段 因为 Access 会
  • 使用 jquery 选择最近的锚元素

    我有一张带有一个链接的表 如下所示 td a href class topiclink item Topic a td 我想选择 item topic的数据 我尝试使用 topiclink click function e var val
  • CoreData 无法完成以下错误:

    我有一个非常烦人的问题 我似乎无法解决 当我发送一条消息并保存到核心数据时 我有一个视图 完成后它会向数据库询问随机消息 句子 并将其保存到数据库中的另一行 如果我对最后一部分进行硬编码 而不从数据库中获取数据 那么它工作得很好 但是一旦我
  • 如何让 FTP-Simple 在 Visual Studio Code 中工作?

    我最近选择开始使用 Visual Studio Code 我想连接到远程服务器并直接在服务器上编辑文件 FTP Simple 似乎是一个很好的解决方案 但我很难理解该程序的一些基础知识 如果我连接到服务器 FTP Simple 是否会下载a
  • Service Worker 和 AppCache 的比较

    Service Worker 和 AppCache 之间的核心区别是什么 每种方法的优点和缺点是什么 何时更喜欢其中一种 主要区别在于 AppCache 是一个高级声明式 API 您可以使用它指定希望浏览器缓存的资源集 而 Service
  • 使用 Shibboleth 和 Google App Engine java 实现 SSO

    我正在开发一个应用程序谷歌应用引擎在Java中 在这个应用程序中我必须实现SSO using SAML2 我的谷歌应用程序引擎应用程序将充当服务提供商 而身份提供商将是一个单独的服务器 我只需编写 SSO 的 SP 端 我是 SAML 新手
  • 分离使用 python 多处理模块启动的子进程

    我想使用 python 中的 mutliprocessing 模块创建一个进程 但确保它在创建子进程的进程退出后继续运行 我可以使用 subprocess 模块和 Popen 获得所需的功能 但我想将代码作为函数而不是脚本运行 我想这样做的
  • 如何在 Mac 上更改 R 版本

    我正在尝试使用旧版本的 R 在 Mac 上运行包 在 Windows 上 常规 选项卡中有一个开关 但是 在 Mac RStudio 上找不到它 我参考了这个帖子 https support rstudio com hc en us art
  • 使用 gson 反序列化内部类返回 null

    我想使用 Gson 将 JSON 反序列化为对象 我已经定义了适当的类 其中一些类的对象包含在其他对象中 当尝试反序列化整个 JSON 时 我得到了空值 因此我开始将其分解 我达到了所有较低类都站在自己一边的地步 但是当尝试反序列化为包含该
  • 从 UserAgent 字符串创建 HttpBrowserCapabilityBase

    So the Http请求库 http msdn microsoft com en us library system web httprequestbase aspx类有一个浏览器属性 http msdn microsoft com en