从UserAgent字符串创建HttpBrowserCapabilitiesBase

本文关键字:HttpBrowserCapabilitiesBase 创建 字符串 UserAgent | 更新日期: 2023-09-27 18:02:40

所以HttpRequestBase类有一个返回httpbrowsercapabiltiesbase的Browser属性。我们目前在一些MVC基础架构代码中使用这个属性来获取浏览器名称和版本号(用于输出到日志)等信息。

我们也有一个使用ServiceStack的api,我希望能够将它挂钩到我们现有的基础设施中。唯一缺少的是能够解析出UserAgent报头的浏览器名称和版本(我感谢IHttpRequest.UserAgent),但需要一种方法来解析它。

我的问题-是否有可能以某种方式创建一个httpbrowsercapacabiltiesbase与只是一个UserAgent字符串?我在msdn上看到的唯一可用的子类型是httpbrowsercapabiltieswrapper,其唯一的变量是另一个httpbrowsercapabiltiesbase。

我在想这个类可能只是解析UserAgent字符串,所以为什么没有一个角色(字符串)?是否有子类型,工厂或静态方法,我没有看到,可以完成这一点?

一般来说,我只是为了懒惰,我不想写/找到另一个UserAgent解析器,当我知道。net有这个功能,他们只是隐藏它。

从UserAgent字符串创建HttpBrowserCapabilitiesBase

我必须自己做。这是我尝试过的。它是从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;
    }
}
测试:

var features = BrowserCapabilities.GetHttpBrowserCapabilities(null, 
    "Mozilla/4.0    (compatible; MSIE 7.0; Windows NT 6.0)");
Console.WriteLine(features.Browser);
相关文章:
  • 没有找到相关文章