Xamarin формирует WebView с потерей сеанса / cookie - PullRequest
2 голосов
/ 14 июля 2020

Я использую Webview в приложении Xamarin Forms. Я устанавливаю специфику c готовить ie, как мы видим в приведенном ниже коде.

Проблема: Webview открывается правильно и страница загружается, но Веб-сайт содержит кнопку «Далее», которая приведет нас на другую веб-страницу. Всякий раз, когда я нажимаю «Далее», я сразу получаю Тайм-аут сеанса . Это похоже на то, что Webview не спасет ie повара, когда я буду перемещаться внутри него.

WebScreen.xaml:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         xmlns:d="http://xamarin.com/schemas/2014/forms/design"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
         mc:Ignorable="d"
         x:Class="EPayment.Views.DetailViews.WebScreen">
<ContentPage.Content>
    <StackLayout>
        <WebView x:Name="paymentWebView" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand"
                 Navigated="paymentWebView_Navigated" Navigating="paymentWebView_Navigating"/>
    </StackLayout>
</ContentPage.Content>

WebScreen. xaml.cs:

[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class WebScreen : ContentPage
{
    public WebScreen(HtmlWebViewSource webSource)
    {
        InitializeComponent();
        paymentWebView.Source = webSource;
    }

    private void paymentWebView_Navigated(object sender, WebNavigatedEventArgs e) { }

    private void paymentWebView_Navigating(object sender, WebNavigatingEventArgs e) { }
}

Вот как я запускаю класс WebScreen:

var httpDate = DateTime.Now.ToString("r");
var cookieValue = httpDate;
var encodedCookie = HttpUtility.UrlEncode(cookieValue);
cookieContainer.Add(baseAddress, new Cookie("cookie", encodedCookie));
var result = await client.PostAsync("/pay", content);
if (result.IsSuccessStatusCode)
{
    var resp = await result.Content.ReadAsStringAsync();
    var html = new HtmlWebViewSource
    {
        Html = resp,
        BaseUrl = "https://testsecureacceptance.cybersource.com"
    };
    await Navigation.PushAsync(new WebScreen(html));
}

Кто-нибудь знает, какое решение для такого рода проблем? Есть ли способ сохранить файлы cookie или вариант или что-то в этом роде?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...