Задать пользовательский заголовок WebView в UWP
Это может показаться дубликатами других как вопросы, но они являются старыми потоками и не относятся к приложениям Windows UWP.
Я не могу установить пользовательский заголовок в WebView, чтобы загруженные URL-адреса в WebView могли работать для меня.
Я видел много форумов, дающих решение, такое как использование HttpClient / WebRequest с заголовком, но это не работает, как в моем случае, использование веб-адреса Javascript для перенаправления и перед перенаправлением ему нужно несколько пользовательских заголовков для правильной загрузки.
и WebView.NavigateWithHttpRequestMessage не так подходит, как это будет postback, и мне нужны заголовки для каждого запроса, включая перенаправленные URL-адреса javascript в веб-представление.
Я могу установить пользовательские заголовки в Xamarin.Проект Droid с использованием визуализаторов, но я не смог найти решения для UWP Windows.UI.Xaml.Controls.WebView
.
2 ответов
на универсальной платформе Windows 10,WebView.NavigateWithHttpRequestMessage
метод-это правильный путь.
a. Мне нужны заголовки для каждого запроса, включая перенаправленные URL-адреса javascript в веб-представлении.
b. Это не решило мою проблему, так как после установки заголовков
OnWebViewNavigationStarting
метод вызывается несколько раз, и приложение автоматически с системой.Ошибку StackOverflowException
это связано с бесконечное навигации произойдет, если мы сделаем навигацию в NavigationStarting
событие. Мы должны!--17-->отмена навигации в обработчик для этого события, установив WebViewNavigationStartingEventArgs.Cancel
свойство правда.
и нам нужно добавить/удалить обработчик для NavigationStarting
осторожно событие.
код:
private void NavigateWithHeader(Uri uri)
{
var requestMsg = new Windows.Web.Http.HttpRequestMessage(HttpMethod.Get, uri);
requestMsg.Headers.Add("User-Name", "Franklin Chen");
wb.NavigateWithHttpRequestMessage(requestMsg);
wb.NavigationStarting += Wb_NavigationStarting;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
NavigateWithHeader(new Uri("http://openszone.com/RedirectPage.html"));
}
private void Wb_NavigationStarting(WebView sender, WebViewNavigationStartingEventArgs args)
{
wb.NavigationStarting -= Wb_NavigationStarting;
args.Cancel = true;//cancel navigation in a handler for this event by setting the WebViewNavigationStartingEventArgs.Cancel property to true
NavigateWithHeader(args.Uri);
}
скриншот-это информация о журнале в Саша, запись запроса во втором красном прямоугольнике включала пользовательский заголовок:
я поделился своим образцом UWP в здесь, вы можете легко интегрироваться в приложение Xamarin UWP.
с тегом Xamarin кажется, что вы используете это с Xamarin.Формы и, следовательно, ниже Ответ в отношении Xamarin.Формы. Однако код остается верным и для WebView в UWP.
вы можете попробовать создать пользовательский визуализатор для WebView, а затем попробовать использовать тот же WebView.NavigateWithHttpRequestMessage.
перед навигацией вы можете попробовать установить заголовки следующим образом:
var requestMsg = new Windows.Web.Http.HttpRequestMessage(HttpMethod.Get, new Uri("https://www.whatismybrowser.com/detect/what-http-headers-is-my-browser-sending"));
requestMsg.Headers.Add("User-Name", "AnubhavRanjan");
Control.NavigateWithHttpRequestMessage(requestMsg);
Uri выше можно установить основанный на вашем требование.
в случае, если запрос происходит несколько раз, вы всегда можете установить делегат для события NavigationStarting и обработать его в методе.
Control.NavigationStarting += OnWebViewNavigationStarting