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

