所以HttpRequestBase类有一个Browser属性,它返回一个HttpBrowserCapabilitiesBase.我们目前在一些MVC基础设施代码中使用此属性来获取浏览器名称和版本号(输出到日志).
我们还有一个使用ServiceStack的api,我希望能够将它挂钩到我们现有的基础架构中.唯一缺少的是能够解析UserAgent标题中的浏览器名称和版本(我感谢IHttpRequest.UserAgent),但需要一种方法来解析它.
我的问题 - 是否可以用UserAgent字符串以某种方式创建HttpBrowserCapabilitiesBase?我在msdn上看到的唯一可用子类型是HttpBrowserCapabilitiesWrapper,其唯一的ctor是另一个HttpBrowserCapabilitiesBase.
我以为这个类可能只是解析UserAgent字符串,所以为什么不存在ctor(字符串)?是否存在可以实现此目的的子类型,工厂或静态方法?
一般来说,我只是为了懒惰而这样做 - 当我知道.Net有这种能力他们只是隐藏它时,我不想写/找到另一个UserAgent解析器.
maf*_*fue 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;
}
}
Run Code Online (Sandbox Code Playgroud)
去测试:
var features = BrowserCapabilities.GetHttpBrowserCapabilities(null,
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)");
Console.WriteLine(features.Browser);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1644 次 |
最近记录: |