C# 更改UWP应用程序WebBrowser控件中的用户代理标头

C# 更改UWP应用程序WebBrowser控件中的用户代理标头,c#,win-universal-app,C#,Win Universal App,如何在UWP应用程序WebBrowser控件中全局更改用户代理标头 我可以在WebBrowser控件中加载的初始url中更改用户代理标头 httpRequestMessage.Headers.Append("User-Agent", ...); browser.NavigateWithHttpRequestMessage(httpRequestMessage); 但任何来自网页的内部链接重定向似乎都不会使用此自定义用户代理标题。与Android或iOS不同,Microsoft不会公开在We

如何在UWP应用程序WebBrowser控件中全局更改用户代理标头

我可以在WebBrowser控件中加载的初始url中更改用户代理标头

httpRequestMessage.Headers.Append("User-Agent", ...); 
browser.NavigateWithHttpRequestMessage(httpRequestMessage); 

但任何来自网页的内部链接重定向似乎都不会使用此自定义用户代理标题。

与Android或iOS不同,Microsoft不会公开在WebView组件中全局更改用户代理的方法

对于单个GET或POST请求,您可以如下设置UA:

Uri^ targetURL = ref new Uri("http://www.yourUrlString.com");
HttpClient^ newRequest = ref new HttpClient();
auto headers = newRequest->DefaultRequestHeaders;
headers->UserAgent->TryParseAdd("your user-agent string here");
create_task(newRequest->GetAsync(targetUrl)).then([=](HttpResponseMessageData^ data) 
{
   //Your callback here
});
使用这种技术,可以连接到并拦截每个请求,但我强烈建议不要这样做

唯一公开您要导航到的Uri以及取消请求的功能。它不公开它是什么类型的请求,也不公开意图来自何处。因此,不可能重新创建最初的导航意图,您将开始看到导航错误

例如,某些网页具有JavaScript元素,可以在单击按钮时发出POST请求,如果您拦截这些请求并将其重新创建为GET请求,则请求将失败,用户的操作将丢失


在Microsoft在WebView中更改此行为之前,我认为不可能有意义地更改UA。

与Android或iOS不同,Microsoft不会公开一种在WebView组件中全局更改用户代理的方法

对于单个GET或POST请求,您可以如下设置UA:

Uri^ targetURL = ref new Uri("http://www.yourUrlString.com");
HttpClient^ newRequest = ref new HttpClient();
auto headers = newRequest->DefaultRequestHeaders;
headers->UserAgent->TryParseAdd("your user-agent string here");
create_task(newRequest->GetAsync(targetUrl)).then([=](HttpResponseMessageData^ data) 
{
   //Your callback here
});
使用这种技术,可以连接到并拦截每个请求,但我强烈建议不要这样做

唯一公开您要导航到的Uri以及取消请求的功能。它不公开它是什么类型的请求,也不公开意图来自何处。因此,不可能重新创建最初的导航意图,您将开始看到导航错误

例如,某些网页具有JavaScript元素,可以在单击按钮时发出POST请求,如果您拦截这些请求并将其重新创建为GET请求,则请求将失败,用户的操作将丢失


在Microsoft在WebView中改变这种行为之前,我认为不可能有意义地改变UA。

没有真正的解决方案,但使用Win32 API也可能对UWP应用程序有所帮助:事实上,我找到了方法。我需要先取消WebView中的导航,然后再启动导航处理程序,并使用与httpsRequestMessage相同的代码显式导航。@sibbl我已经尝试过了,尽管它在各地的仿真器设备上都可以正常工作,但我的windows Phone 8.1应用程序在windows应用商店上的认证失败。必须删除
.dll的此引用才能传递它。即使你在
NavigationStarting
事件中调用它,也不会导致相同的
url
被反复点击。没有真正的解决方案,但可能使用Win32 API对UWP应用程序也有帮助:事实上,我找到了方法。我需要先取消WebView中的导航,然后再启动导航处理程序,并使用与httpsRequestMessage相同的代码显式导航。@sibbl我已经尝试过了,尽管它在各地的仿真器设备上都可以正常工作,但我的windows Phone 8.1应用程序在windows应用商店上的认证失败。必须删除
.dll的此引用才能传递它。即使您在
NavigationStarting
事件中调用它,也不会导致相同的
url
被反复点击。