You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF中WebView2无法拦截CSS内woff2重定向引发CORS错误求助

解决思路

1. 扩大拦截的资源范围与上下文

WebResourceRequested默认可能未覆盖字体类资源,需确保拦截过滤器包含字体MIME类型及所有资源上下文:

  • 初始化WebView2时,添加覆盖所有资源类型和上下文的过滤器:
    webView.CoreWebView2.AddWebResourceRequestedFilter("*/*", CoreWebView2WebResourceContext.All);
    
  • 也可精准指定字体类型:"font/*",搭配CoreWebView2WebResourceContext.Fonts上下文,避免不必要的拦截。

2. 修正CSS中的资源路径

由于CSS是重定向返回的,其中的相对路径./assets/fonts/...会基于CSS的最终URL解析,可能导致字体请求的URL不在你的拦截规则范围内。

  • 在拦截CSS请求的响应时,修改CSS内容,将相对路径替换为绝对路径(或符合你拦截规则的固定路径)。例如:
    private async void WebView_WebResourceRequested(object sender, CoreWebView2WebResourceRequestedEventArgs e)
    {
        if (e.Request.Uri.EndsWith(".css"))
        {
            // 获取原始CSS响应内容
            var response = await e.Request.GetResponseAsync();
            using var stream = response.Content;
            using var reader = new StreamReader(stream);
            var cssContent = await reader.ReadToEndAsync();
            // 替换相对路径为绝对路径
            var modifiedCss = cssContent.Replace("./assets/fonts/", "https://your-domain.com/assets/fonts/");
            // 返回修改后的CSS
            var newResponse = webView.CoreWebView2.Environment.CreateWebResourceResponse(
                new MemoryStream(Encoding.UTF8.GetBytes(modifiedCss)),
                response.StatusCode,
                response.ReasonPhrase,
                response.Headers.ToString());
            e.Response = newResponse;
        }
    }
    

3. 确保拦截器注册时机正确

拦截器必须在CoreWebView2初始化完成后注册,否则无法生效。例如在CoreWebView2InitializationCompleted事件中添加拦截逻辑:

private async void WebView_CoreWebView2InitializationCompleted(object sender, CoreWebView2InitializationCompletedEventArgs e)
{
    if (e.IsSuccess)
    {
        webView.CoreWebView2.AddWebResourceRequestedFilter("*/*", CoreWebView2WebResourceContext.All);
        webView.CoreWebView2.WebResourceRequested += WebView_WebResourceRequested;
    }
}

4. 排查WebView2版本兼容性

部分旧版本WebView2存在子资源拦截的bug,建议升级到最新稳定版:

  • 更新NuGet包中的Microsoft.Web.WebView2版本
  • 安装最新的WebView2 Runtime

5. 临时绕开CORS(仅用于调试)

若拦截问题暂时无法解决,可通过修改WebView2的CORS策略临时测试:

webView.CoreWebView2.Settings.IsWebSecurityEnabled = false;

注意:此设置会关闭Web安全,仅适合调试,生产环境禁用。

内容的提问来源于stack exchange,提问作者Dsg951

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 12:30:10