在 Maui Blazor 混合应用程序中访问 cookie?

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

我有一个 .NET 8 Maui Blazor 混合应用程序,我目前正在尝试弄清楚如何从 BlazorWebView 访问 cookie。

到目前为止,我已经检查了 WebView 文档,其中包含我需要的“Cookies”属性。但是,尽管有这个名字,BlazorWebView 奇怪的是并不是源自

WebView

我发现访问至少有关于 cookie 的成员的 webview 的一种方法是通过特定于平台的代码,滥用

BlazorWebView
背后的实际实现。对于 Windows,这看起来像这样:

MainPage.xaml.cs

public MainPage()
{
    InitializeComponent();
}

protected override void OnHandlerChanged()
{
    var webView = blazorWebView.Handler?.PlatformView as Microsoft.UI.Xaml.Controls.WebView2;
}

但是,如果我尝试从

CookieManager
中获取
WebView2
,我会遇到 nullref

//CoreWebView2 is null here
var cm = webView.CoreWebView2.CookieManager;

另一个问题是,结果将是一个

CoreWebview2CookieManager
,管理一个
CoreWebView2Cookie
列表,而不是漂亮且简单的 System.Net Cookie。这意味着不仅要获取 cookie,而且还必须为每个平台实现每个接触 cookie 的类。

我知道我可以使用

IPreferences
ISecureStorage
代替 cookie,并通过
AuthenticationStateProvider
进行身份验证,但我不敢相信从像那里那样的
BlazorWebView
不会轻松访问 cookie来自常规的
WebView
。真的没有吗

c# maui maui-blazor blazorwebview
1个回答
0
投票

但是,如果我随后尝试从该 WebView2 获取 CookieManager,我会遇到 nullref

这是因为执行Page的OnHandlerChanged方法时,BlazorWebview尚未初始化。

您可以尝试在 BlazorWebview 的

BlazorWebViewInitialized
方法中获取 CookieManager:

在xaml中:

<BlazorWebView x:Name="blazorWebView" HostPage="wwwroot/index.html" BlazorWebViewInitialized="blazorWebView_BlazorWebViewInitialized">

在后面的代码中:

private void blazorWebView_BlazorWebViewInitialized(object sender, Microsoft.AspNetCore.Components.WebView.BlazorWebViewInitializedEventArgs e)
 {
     var webview = blazorWebView.Handler.PlatformView as Microsoft.UI.Xaml.Controls.WebView2;
     var webView2 = webview.CoreWebView2;
     var cookie = webView2.CookieManager;
 }
© www.soinside.com 2019 - 2024. All rights reserved.