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

.NET 8 MAUI Android中WebView Source含前置/随机空格触发net::ERR_FILE_NOT_FOUND错误

解决.NET 8 MAUI Android WebView含前置空格参数时的加载错误

问题原因

直接拼接含前置/随机空格的变量到URL时,MAUI WebView的URL解析逻辑会误将合法的HTTP URL识别为本地asset文件路径,导致出现net::ERR_FILE_NOT_FOUND错误,错误路径会带上file:///android_asset/前缀。

可行解决方法

1. 对参数值进行标准URL编码

使用Uri.EscapeDataString()对变量进行编码,确保所有特殊字符(包括空格)符合URL规范,避免解析错误:

// 对变量进行URL编码
var encodedVariable = Uri.EscapeDataString(myVariable);
// 拼接成合法URL后赋值
myWebView.Source = $"https://example.com/?q={encodedVariable}";

该方法会将空格统一编码为%20,同时处理其他可能导致URL解析异常的特殊字符,确保WebView正确识别为远程HTTP URL。

2. 手动指定UrlWebViewSource类型

如果直接赋值字符串仍存在识别问题,可以手动创建UrlWebViewSource对象,明确告知WebView加载远程资源:

var encodedVariable = Uri.EscapeDataString(myVariable);
var urlSource = new UrlWebViewSource
{
    Url = $"https://example.com/?q={encodedVariable}"
};
myWebView.Source = urlSource;

这种方式强制指定资源类型为远程URL,避免MAUI自动判断时出现误判。

3. 使用UriBuilder构建完整URL

对于复杂的多参数场景,推荐用UriBuilder和HttpUtility来构建URL,确保参数编码和URL格式完全合法:

var baseUri = new Uri("https://example.com/");
var uriBuilder = new UriBuilder(baseUri);
var queryParams = System.Web.HttpUtility.ParseQueryString(string.Empty);
queryParams["q"] = myVariable;
uriBuilder.Query = queryParams.ToString();

myWebView.Source = uriBuilder.Uri.ToString();

HttpUtility.ParseQueryString会自动对参数值进行URL编码,无需手动处理。

验证效果

采用上述方法后,无论变量包含前置、中间还是后置空格,WebView都会正确识别为远程HTTP URL,不会再尝试从本地asset加载,解决net::ERR_FILE_NOT_FOUND错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 14:05:02