【问题标题】:Put cookie on a WebView in Xamarin将 cookie 放在 Xamarin 中的 WebView 上
【发布时间】:2017-08-08 18:45:51
【问题描述】:

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

  • 用户在主页上输入他的用户名和密码。
  • 如果数据正确(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】:

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

    如果您熟悉渲染器的工作原理,请在 Xamarin 论坛上关注 Christine Blanda 的这篇帖子: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);
    

    【讨论】:

    • CookieManager 没有名为 Instance 的属性。你能解释一下它是如何工作的吗?另外,我的编译器无法处理 AppInfo.URL_BASE
    • 论坛上的链接提供了一些关键信息。最终,我使用了此处提供的一些代码,但请访问论坛以全面了解。这行得通。
    猜你喜欢
    • 2016-12-17
    • 1970-01-01
    • 2015-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多