因此HttpRequestBase类的Browser property返回HttpBrowserCapabilitiesBase。我们目前在一些MVC基础设施代码中使用此属性来获取浏览器名称和版本号(输出到日志)。
我们还有一个使用ServiceStack的api,我希望能够将其挂钩到我们现有的基础架构中。唯一缺少的是能够解析UserAgent标题中的浏览器名称和版本(我感谢IHttpRequest.UserAgent),但需要一种方法来解析它。
我的问题 - 是否可以仅使用UserAgent字符串以某种方式创建HttpBrowserCapabilitiesBase?我在msdn上看到的唯一可用子类型是HttpBrowserCapabilitiesWrapper,其唯一的ctor是另一个HttpBrowserCapabilitiesBase。
我在想这个类可能只是解析UserAgent字符串,所以为什么没有ctor(字符串)?是否存在可以实现此目的的子类型,工厂或静态方法?
一般来说,我只是为了懒惰而这样做 - 当我知道.Net有这种能力他们只是隐藏它时,我不想写/找到另一个UserAgent解析器。
答案 0 :(得分:10)
我必须自己做这件事。这是我尝试过的。它是从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);