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(使用前将#替换为@)