Moinsen,
ich habe folgendes Problem, das die JavaScript von einer three.js keine Objects in
wwwroot findet.
Blazor Server APP NET 6.0
Index.razor
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
await JSRuntime.InvokeVoidAsync("loadJs", "threeMain.js");
}
}
threeMain.js
const loader = new FBXLoader();
loader.load('data/fbxModel.fbx', function (object) {...
hier findet der loader das fbx object nicht obwohl es im Ordner wwwroot/data liegt,
auch unter wwwroot direkt wird nichts gefunden.
Kann ich unter Blazor vorher (Programm.cs) die Dateien referenzieren ?
Ein img wird auch erst gefunden, wenn es auf der razor-html angefordert wird...
hiernnochmal die program.cs
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor();
builder.Services.AddSingleton<WeatherForecastService>();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseStaticFiles();
app.MapBlazorHub();
app.MapFallbackToPage("/_Host");
app.Run();
Nur weil eine Datei in wwwroot liegt wird diese noch lange nicht geladen.
JavaScript Dateien müssen über HTML (Layout wenn Global, in der jeweiligen Page wenn Local) mit dem <script>-Tag bekannt gemacht werden.
Danach erst stehen die Funktionen im DOM zur Verfügung.
Aber Achtung: das Laden einer JS-Dateien kann manchmal ein paar Millisekunden brauchen.
Man muss also sicher sein, dass die JS-Datei zur Ausführung der Funktion auch wirklich vollständig verarbeitet wurde.
ASP.NET Core Blazor JavaScript interoperability (JS interop)
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
ich habe den Fehler gefunden 😉
in der program.cs
var provider = new FileExtensionContentTypeProvider();
// Add new mappings
provider.Mappings[".fbx"] = "application/x-msdownload";
app.UseRouting();
app.UseDefaultFiles();
app.UseDirectoryBrowser();
app.UseStaticFiles();
app.UseStaticFiles(new StaticFileOptions
{
ContentTypeProvider = provider
//Alternativ:
//ServeUnknownFileTypes = true
});
natürlich ist es sicherer mit den Mappings, wenn die App öffentlich ist.
Ansonsten ServeUnknownFileTypes = true