在.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.
相关产品推荐
相关产品推荐

