在 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();
我的项目是在 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();