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

如何在.NET 7 MAUI Android WebView控件中设置Web请求头

在.NET 7 MAUI Android平台为WebView设置请求头

MAUI的WebView控件本身没有直接提供.SetHeader()这类方法,要在Android平台实现请求头自定义,需要借助**平台特定的Handler(替代旧版自定义渲染器)**或者直接调用原生WebView的API来实现,以下是两种可行方案:

方案一:通过自定义WebViewHandler全局拦截添加请求头

这种方式会自动为WebView的所有请求添加指定头,适合全局需要统一设置的场景:

  1. 在Android项目中创建自定义Handler类
using Android.Webkit;
using Microsoft.Maui.Handlers;

namespace YourAppNamespace.Platforms.Android;

public class CustomWebViewHandler : WebViewHandler
{
    protected override void ConnectHandler(Android.Webkit.WebView platformView)
    {
        base.ConnectHandler(platformView);
        // 替换成自定义的WebViewClient来拦截请求
        platformView.SetWebViewClient(new CustomHeaderWebViewClient());
    }

    private class CustomHeaderWebViewClient : WebViewClient
    {
        // 拦截所有资源请求,添加自定义头
        public override WebResourceResponse ShouldInterceptRequest(Android.Webkit.WebView view, IWebResourceRequest request)
        {
            // 构建新请求并添加自定义头
            var modifiedRequest = new WebResourceRequest.Builder(request)
                .AddHeader("Authorization", "Bearer your-token") // 替换成你的头名和值
                .AddHeader("Custom-Header", "custom-value")
                .Build();
            
            return base.ShouldInterceptRequest(view, modifiedRequest);
        }

        // 兼容Android旧版本(可选,若无需兼容可删除)
        public override WebResourceResponse ShouldInterceptRequest(Android.Webkit.WebView view, string url)
        {
            var request = new WebResourceRequest.Builder()
                .SetUrl(Android.Net.Uri.Parse(url))
                .AddHeader("Authorization", "Bearer your-token")
                .Build();
            
            return base.ShouldInterceptRequest(view, request);
        }
    }
}
  1. 在MauiProgram中注册这个Handler
using YourAppNamespace.Platforms.Android;

builder.ConfigureMauiHandlers(handlers =>
{
#if ANDROID
    handlers.AddHandler<Microsoft.Maui.Controls.WebView, CustomWebViewHandler>();
#endif
});

方案二:手动调用原生WebView加载URL并传入请求头

如果只需要在特定加载场景添加请求头,可以直接获取Android原生WebView实例,调用它的LoadUrl方法并传入头字典:

using Microsoft.Maui.Controls;

// 在你的页面代码中
private void LoadUrlWithHeaders()
{
    var targetUrl = "https://your-target-website.com";
    var headers = new Dictionary<string, string>
    {
        {"Authorization", "Bearer your-token"},
        {"X-Custom-Info", "maui-android"}
    };

#if ANDROID
    // 获取Android原生WebView实例
    var androidWebView = (Android.Webkit.WebView)MyWebView.Handler.PlatformView;
    androidWebView.LoadUrl(targetUrl, headers);
#endif
}

注意事项

  • 方案一中的ShouldInterceptRequest会拦截所有请求(包括页面内的CSS、JS、图片等资源),如果只想给主页面添加头,可以通过判断request.Url.Host来过滤请求。
  • 确保Android项目的AndroidManifest.xml中已添加INTERNET权限(MAUI默认会自动添加,若未添加可手动添加:<uses-permission android:name="android.permission.INTERNET" />)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 21:01:44