将cookie放在Xamarin的WebView上

问题描述 投票:3回答:1

我在Xamarin项目中有以下计划:

  • 用户在MainPage上输入他的用户名和密码。
  • 如果数据正确(存在API),请导航到WebView并自动在此页面上登录用户。

现有API(非公共)提供System.Net.CookieCollection。

如何使用带有这些cookie的POST请求来实现我的想法?这是我的基础:

[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class WebPage : ContentPage
{
    public WebPage(string url, CookieCollection cookies)
    {
        InitializeComponent();
        BindingContext = new MainPageViewModel();
        MyWebView.Source = "https://" + url;

    }
}

亲切的问候,localhorst27

c# xamarin post cookies xamarin.forms
1个回答
5
投票

您必须在Android和iOS上为WebView创建自定义渲染器。这样你就可以将cookie注入Android WebView和iOS UIWebView。如果你不熟悉它们,请从这里开始:Introduction to Custom Renderers

当您熟悉渲染器的工作原理时,请阅读Christine Blanda在Xamarin论坛上的这篇文章:Setting Cookies in a WebView

我还会在这里发布代码,以确保在原始帖子发生故障时保留它。

Android OnElementChanged

var cookieManager = CookieManager.Instance;
cookieManager.SetAcceptCookie(true);
cookieManager.RemoveAllCookie();
var cookies = UserInfo.CookieContainer.GetCookies(new System.Uri(AppInfo.URL_BASE));
for (var i = 0; i < cookies.Count; i++)
{
    string cookieValue = cookies[i].Value;
    string cookieDomain = cookies[i].Domain;
    string cookieName = cookies[i].Name;
    cookieManager.SetCookie(cookieDomain, cookieName + "=" + cookieValue);
}

iOS OnElementChanged

// Set cookies here
var cookieUrl = new Uri(AppInfo.URL_BASE);
var cookieJar = NSHttpCookieStorage.SharedStorage;
cookieJar.AcceptPolicy = NSHttpCookieAcceptPolicy.Always;
foreach (var aCookie in cookieJar.Cookies)
{
    cookieJar.DeleteCookie(aCookie);
}

var jCookies = UserInfo.CookieContainer.GetCookies(cookieUrl);
IList<NSHttpCookie> eCookies = 
                   (from object jCookie in jCookies 
                    where jCookie != null 
                    select (Cookie) jCookie 
                    into netCookie select new NSHttpCookie(netCookie)).ToList();
cookieJar.SetCookies(eCookies.ToArray(), cookieUrl, cookieUrl);
© www.soinside.com 2019 - 2024. All rights reserved.