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

Blazor WebAssembly报错:找不到路径'/sample-data/DBFile.json'求助

Blazor WebAssembly 文件路径错误解决方案

错误原因

Blazor WebAssembly 运行在浏览器沙箱环境中,无法直接通过System.IO.File类访问本地文件系统。你代码里的System.IO.File.WriteAllText是针对桌面/服务器应用的API,在浏览器中执行时会因为没有文件系统权限和路径解析逻辑不匹配,抛出找不到路径的异常。

正确的文件读取方式

你使用HttpClient读取文件的思路是对的,这是Blazor WASM中读取静态资源的标准方式,但需要确保文件位置和路径配置正确:

  1. 将DBFile.json放在项目的wwwroot/sample-data目录下(wwwroot是Blazor WASM的静态资源根目录,所有前端可访问的静态文件都要放在这里)
  2. 确保jsonPath的值为"sample-data/DBFile.json"(不需要加前缀/,HttpClient默认从网站根目录发起请求)

修正后的读取代码示例:

private readonly HttpClient _http;

// 通过依赖注入获取HttpClient实例
public YourDataService(HttpClient http)
{
    _http = http;
}

public async Task<List<MotoDTO>> LoadData()
{
    var jsonPath = "sample-data/DBFile.json";
    var response = await _http.GetAsync(jsonPath);

    if (response.IsSuccessStatusCode)
    {
        var content = await response.Content.ReadAsStringAsync();
        return JsonConvert.DeserializeObject<List<MotoDTO>>(content);
    }
    else
    {
        return new List<MotoDTO>();
    }
}

正确的数据保存方式

受浏览器沙箱限制,无法直接写入本地静态文件,推荐以下两种可行方案:

方案1:使用浏览器本地存储(LocalStorage)

通过IJSRuntime调用浏览器的LocalStorage API保存数据,数据会持久化存储在用户的浏览器中:

private readonly IJSRuntime _jsRuntime;

// 通过依赖注入获取IJSRuntime实例
public YourDataService(IJSRuntime jsRuntime)
{
    _jsRuntime = jsRuntime;
}

public async Task SaveData(List<object> list)
{
    try
    {
        var output = System.Text.Json.JsonSerializer.Serialize(list);
        // 调用JS方法将数据存入LocalStorage
        await _jsRuntime.InvokeVoidAsync("localStorage.setItem", "appDbData", output);
    }
    catch (Exception ex)
    {
        var msg = ex.Message;
        // 这里可以添加异常日志或用户提示逻辑
    }
}

// 对应从LocalStorage读取数据的方法
public async Task<List<MotoDTO>> LoadFromLocalStorage()
{
    var json = await _jsRuntime.InvokeAsync<string>("localStorage.getItem", "appDbData");
    if (!string.IsNullOrEmpty(json))
    {
        return JsonConvert.DeserializeObject<List<MotoDTO>>(json);
    }
    return new List<MotoDTO>();
}

方案2:上传到后端服务器

如果需要将数据持久化存储到服务器,需要编写后端API接口接收数据,然后在Blazor中通过HttpClient上传:

private readonly HttpClient _http;

public YourDataService(HttpClient http)
{
    _http = http;
}

public async Task SaveToServer(List<object> list)
{
    try
    {
        var output = System.Text.Json.JsonSerializer.Serialize(list);
        var content = new StringContent(output, Encoding.UTF8, "application/json");
        // 调用后端API接口,替换为你的实际接口地址
        var response = await _http.PostAsync("api/data/save", content);
        response.EnsureSuccessStatusCode();
    }
    catch (Exception ex)
    {
        var msg = ex.Message;
        // 处理上传异常
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 04:07:48