Задать пользовательский заголовок 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);
    }

скриншот-это информация о журнале в Саша, запись запроса во втором красном прямоугольнике включала пользовательский заголовок:

enter image description here

я поделился своим образцом 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