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

在.NET MAUI中WebView返回401时如何检测加载异常?

.NET MAUI WebView 非2xx状态码检测问题解决方法

在.NET MAUI的WebView中,触发Navigated事件时,即便请求返回401(未授权)这类非2xx状态码,WebNavigatedEventArgs.Result仍会显示为WebNavigationResult.Success,导致常规的失败判断逻辑无法识别这类错误。比如以下代码就无法捕获401错误:

void Navigated(WebNavigatedEventArgs args)
{            
    if (args.Result == WebNavigationResult.Failure)
    {
        IsConnectionOK = false;
    }
}

无需大量平台特定代码的解决方案

可以利用WebView的JS交互能力,在页面导航完成后注入JavaScript代码获取HTTP响应状态码,以此判断请求是否异常。

修改后的代码示例:

async void Navigated(WebNavigatedEventArgs args)
{
    IsConnectionOK = true;

    try
    {
        // 通过JS获取当前页面的响应状态码
        var statusCodeStr = await args.WebView.EvaluateJavaScriptAsync(
            "performance.getEntriesByType('navigation')[0].responseStatus"
        );

        if (int.TryParse(statusCodeStr, out int statusCode))
        {
            // 非2xx状态码判定为加载异常
            if (statusCode < 200 || statusCode >= 300)
            {
                IsConnectionOK = false;
                // 可根据具体状态码扩展逻辑,比如401跳转登录页
            }
        }
    }
    catch (Exception)
    {
        // JS执行失败(如页面完全无法加载),标记为连接异常
        IsConnectionOK = false;
    }
}

说明

  • 该方法借助WebView跨平台的JS执行能力,避免编写大量平台特定代码;
  • 若加载的是自定义错误页,也可在页面DOM中嵌入状态码信息,再通过JS读取,提升兼容性;
  • 捕获异常分支可覆盖页面完全无法加载、无JS执行环境的极端场景。

内容的提问来源于stack exchange,提问作者H.A.H.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 04:26:04