创建从用户代理字符串HttpBrowserCapabilitiesBase(Creating a H

2019-08-17 08:37发布

所以HttpRequestBase类有一个浏览器属性 ,它返回一个HttpBrowserCapabilitiesBase 。 目前,我们使用这个属性在我们的一些MVC架构的代码得到的东西,如浏览器名称和版本号(输出到日志)。

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

我的问题 - 是否有可能以某种方式创建一个HttpBrowserCapabilitiesBase只是一个字符串的UserAgent? 唯一可用的亚型我在MSDN上看到的是HttpBrowserCapabilitiesWrapper ,其唯一的构造函数是另一个HttpBrowserCapabilitiesBase。

我在想,这大概类只解析字符串的UserAgent反正,所以为什么没有一个构造函数(字符串)? 是否有一个亚型,工厂或静态方法,我没有看到能做到这一点?

通常我只是做这个懒惰 - 我不想写/找到另一个UserAgent的解析器,当我知道.Net有这种能力,他们只是隐藏它。

Answer 1:

我只是有这个做我自己。 下面是我试过了。 它是从反编译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);


文章来源: Creating a HttpBrowserCapabilitiesBase from a UserAgent string
标签: c# .net http