在 Blazor Wasm 中读取 local/static 个文件

Read local/static file in Blazor Wasm

我的项目是在 Blazor WASM 中创建的(我不想使用 Blazor 服务器)

我想从 wwwroot:

读取 XSD 个文件

在我的 XsdService.cs - c# class 我正在尝试:

string pathToXsd = Path.Combine("plcda","extPL_r2.xsd");
string transformataHTML = System.IO.File.ReadAllText(pathToXsd);

但是,我总是出错:

Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100]
      Unhandled exception rendering component: Could not find a part of the path "/plcda/extPL_r2.xsd".
System.IO.DirectoryNotFoundException: Could not find a part of the path "/plcda/extPL_r2.xsd".

那么是否有机会将 custom/static/local 文件包含到 Blazor WASM 中?即使应用处于离线状态也能阅读它们?

创建对文件的 Http GET 调用。将 Blazor wasm 视为 SPA 应用程序。 运行 您的应用程序所需的所有文件都已下载到用户浏览器中。图像等其他所有内容均应要求获取。就像浏览器请求的图像。

@inject HttpClient _client

@code {
    async Task GetXDSFile()
    {
        var byteOfTheFile = await _client.GetByteArrayAsync("plcda/extPL_r2.xsd");
    }
}

此示例只是将文件作为字节数组获取。其他版本的 Get 可能更适合您 GetStreamAsync

在 .NET Core 6 中,您可以将提供程序映射添加到客户端项目的 program.cs 以提供静态文件。

例如我需要加载 3d 模型(.obj、.mtl 文件):

仅 Blazor WASM 客户端项目:

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.StaticFiles;


var provider = new FileExtensionContentTypeProvider();
provider.Mappings.Add(".obj", "application/obj");
provider.Mappings.Add(".mtl", "application/mtl");

builder.Services.Configure<StaticFileOptions>(options =>
{
    options.ContentTypeProvider = provider;
});

await builder.Build().RunAsync();

如果你有一个 asp.net 核心托管项目,你可以简单地将它放在服务器项目的 program.cs 文件中,而不需要添加 nuget 包引用。

Blazor WASM Asp.net 核心托管项目:

using Microsoft.AspNetCore.StaticFiles;


var provider = new FileExtensionContentTypeProvider();
provider.Mappings.Add(".babylon", "application/javascript");
provider.Mappings.Add(".obj", "application/obj");
provider.Mappings.Add(".mtl", "application/mtl");
builder.Services.Configure<StaticFileOptions>(options =>
{
    options.ContentTypeProvider = provider;
});

var app = builder.Build();