[英]How to disable CORS in WPF WebView2
我正在開發一個使用.Net5/WPF 顯示 WebView2 的應用程序。
我想禁用 CORS。
我已經安裝了 Chromium Edge Canary 86.0.607.0。
在 Edge 中,可以通過將以下參數添加到快捷方式來禁用 CORS。
--disable-web-security --user-data-dir="C://Chrome dev session"
我也想禁用 WebView2。
我在這個論壇上得到了答案。 對不起,這個網站是日文的。
https://social.msdn.microsoft.com/Forums/ja-JP/9bac6d51-94eb-42c8-96f0-4081e9a4056d/wpf-webview2-cors-?forum=wpfja
它與下面的代碼一起工作。
*需要在WebView2.Source中指定URL之前進行設置。
注意不要在 Xaml 側指定 Source。
/// <summary>
/// WPF Window Constructor
/// </summary>
/// <param name="url">URL</param>
public WebViewWindow(string url)
{
InitializeComponent();
// async start
Loaded += async (_, __) => await _Routine(url);
}
/// <summary>
/// task
/// </summary>
/// <param name="url">URL</param>
/// <returns>task</returns>
async Task _Routine(string url)
{
var localPath = Environment.GetEnvironmentVariable("LocalAppData");
var webviewPath = $@"{localPath}\Microsoft\Edge SxS\Application\86.0.608.0";
var userPath = "C://Chrome dev session";
// Argument setting to disable COAR
var op = new CoreWebView2EnvironmentOptions("--disable-web-security");
var env = await CoreWebView2Environment.CreateAsync(webviewPath, userPath, op);
await webView.EnsureCoreWebView2Async(env);
if (Uri.TryCreate(url, UriKind.RelativeOrAbsolute, out Uri? result))
{
webView.Source = result;
}
}
對於 WPF,在構造函數中調用以下代碼
async void InitializeAsync()
{
var op = new CoreWebView2EnvironmentOptions("--disable-web-security");
var env = await CoreWebView2Environment.CreateAsync(null, null, op);
await webView.EnsureCoreWebView2Async(env);
}
另一種選擇是創建一個虛擬主機。 有關詳細信息,請參閱CoreWebView2.SetVirtualHostNameToFolderMapping
:
設置虛擬主機名和文件夾路徑之間的映射,以通過該主機名提供給 web 站點。
例子:
public class VirtualHost
{
private WebView2 webView;
private string hostName;
private string directory;
public VirtualHost(WebView2 webView, string hostName, string directory)
{
this.webView = webView;
this.hostName = hostName;
this.directory = directory;
_ = InitializeAsync();
}
async private Task InitializeAsync()
{
// Wait for CoreWebView2 initialization.
// Explicitly triggers initialization of the control's CoreWebView2.
await webView.EnsureCoreWebView2Async();
// Set a mapping between a virtual host name and a folder path
// to make available to web sites via that host name.
webView.CoreWebView2.SetVirtualHostNameToFolderMapping(
hostName, directory, CoreWebView2HostResourceAccessKind.DenyCors);
webView.Source = new Uri($"https://{hostName}/index.html");
}
}
var localPath = Environment.GetEnvironmentVariable("LocalAppData");
virtualHost = new VirtualHost(view.configuratorWebView, "mylocalhost", localPath);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.