Почему я получаю 404 при динамической загрузке файла, который существует?

На самом деле я получаю три 404-х, пытающихся загрузить один и тот же файл, но тот, который мне интересен, происходит здесь, в моем index.html:

<script>
    System.import('app/main').catch(function (err) { console.error("IMPORT_ERR: " + err); });
</script>

Зарегистрированная ошибка:

IMPORT_ERR: Error: Error: XHR error (404 Not Found) loading http://localhost:57971/node_modules/@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js
        at XMLHttpRequest.wrapFn [as _onreadystatechange] (http://localhost:57971/js/zone.js:647:29)
        at ZoneDelegate.invokeTask (http://localhost:57971/js/zone.js:236:37)
        at Zone.runTask (http://localhost:57971/js/zone.js:136:47)
        at XMLHttpRequest.ZoneTask.invoke (http://localhost:57971/js/zone.js:304:33)
    Error loading http://localhost:57971/node_modules/@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js as "@angular/platform-browser-dynamic" from http://localhost:57971/app/main.js

Все же рассматриваемый файл определенно существует:

PS C:\Dev\Angular2\Projects\Introduction\Code\src> ls TourOfHeroes2\node_modules\@angular\platform-browser-dynamic\bundles

    Directory: C:\Dev\Angular2\Projects\Introduction\Code\src\TourOfHeroes2\node_modules\@angular\platform-brow
    ser-dynamic\bundles

Mode                LastWriteTime         Length Name                                                          
----                -------------         ------ ----                                                          
-a----       2016/09/25   8:50 AM           4631 platform-browser-dynamic-testing.umd.js                       
-a----       2016/09/25   8:50 AM           8749 platform-browser-dynamic.umd.js                               
-a----       2016/09/25   8:50 AM           4703 platform-browser-dynamic.umd.min.js                           

Папка TourOfHeroes2 является корнем веб-приложения.

1 ответ

Решение

Оказывается, приложение не разрешало запросы к статическим файлам в node_modules папка [1]. Я сделал множество небольших изменений в приложении до того, как оно заработало, и я внесу поправки здесь позже сегодня, но наиболее важные были, в Startup:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    app.UseDefaultFiles();
    app.UseStaticFiles();
    UseCustomFileServer(app, env);
}

private void UseCustomFileServer(IApplicationBuilder app, IHostingEnvironment env)
{
    // this will serve up wwwroot
    app.UseFileServer();

    // this will serve up node_modules
    var provider = new PhysicalFileProvider(Path.Combine(env.ContentRootPath, "node_modules"));
    var options = new FileServerOptions();
    options.RequestPath = "/node_modules";
    options.StaticFileOptions.FileProvider = provider;
    options.EnableDirectoryBrowsing = true;
    app.UseFileServer(options);
}

Из-за некоторых, я думаю, плохой дизайн, UseStaticFiles может обслуживать только статические файлы из одного каталога, и нам это нужно для wwwrootтак что пришлось добавить UseFileServer для node_modules источник файла.

[1] Веб-приложения.NET Core по умолчанию не позволяют обслуживать любые статические файлы. Вы должны добавить Microsoft.AspNetCore.StaticFiles пакет для project.jsonи добавьте эти две строки в Startup.Configure(), в правильном порядке:

app.UseDefaultFiles();
app.UseStaticFiles();
Другие вопросы по тегам