Laden...

Blazor javascript static content access - 404

Erstellt von schorge vor einem Jahr Letzter Beitrag vor einem Jahr 651 Views
S
schorge Themenstarter:in
129 Beiträge seit 2014
vor einem Jahr
Blazor javascript static content access - 404

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();


16.835 Beiträge seit 2008
vor einem Jahr

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)

S
schorge Themenstarter:in
129 Beiträge seit 2014
vor einem Jahr

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