2011-07-28 34 views
1

我必须从我的应用程序发送用户代理到服务器。 “Mozilla/4.0(兼容; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0; HTC; HD7 T9292)” 以上是一个示例用户代理。我不知道。为了形成用户代理,我们可以通过编程获得所有的值。任何人都可以请帮忙。WP7以编程方式形成UserAgent

回答

0

这看起来像在HD7上的IE7移动用户代理。我假设你没有写IEMobile,所以你的应用会有不同的用户代理名称/标识符。如果您从您的应用发出网络请求,那么您的应用是与内置浏览器不同的用户代理。

SDK没有公开获取组成示例中用户代理的所有单个元素的方式。

如果你真的想要从你的应用程序中获得浏览器的用户代理,那么最好的办法可能是包括一个WebBrowser控件,然后通过Javascript解压缩navigator.userAgent,但我不知道是否它的支持。如果支持,您可以使用windows.external.notify将它传回给您的代码。

+0

如果我需要通过Web浏览器获取用户代理,那么我需要将WebBrowser添加到可视化树中。然后只有我可以得到用户代理。因此,在主页本身,浏览器将变为可见并在我删除它时熄灭。有没有其他解决方法? – saikamesh

+0

@saikamesh我不是你想要的东西,但是你可以使控件非常小或者在可见区域之外,或者在它前面添加另一个控件,使其不可见。如果将控件的不透明度设置为0,它甚至可能仍然有效。 –

2

为了记录,设备名称不是用户代理的必要部分。

全球用户代理字符串为Mango看起来是这样的:

Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0) 
0

我做了这个帮手,这将创建一个临时的web浏览器,加载脚本,并返回一个awaitable的userAgent:

internal static class UserAgentHelper 
{ 
    private const string Html = @"<!DOCTYPE html><html><body onload=""window.external.notify(navigator.userAgent);""></body></html>"; 
    public static Task<string> GetUserAgent() 
    { 
     var tcs = new TaskCompletionSource<string>(); 
     var browser = new WebBrowser { IsScriptEnabled = true }; 
     browser.ScriptNotify += (sender, args) => tcs.SetResult(args.Value); 
     browser.NavigateToString(Html); 
     return tcs.Task; 
    } 
} 

用法:

var userAgent = await UserAgentHelper.GetUserAgent(); 

它至少适用于WP7.1和WP8.0:

WP7: "Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; Microsoft; XDeviceEmulator)"; 
WP8: "Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; Microsoft; Virtual)";