为什么我在动态加载一个确实存在的文件时得到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:DevAngular2ProjectsIntroductionCodesrc> ls TourOfHeroes2node_modules@angularplatform-browser-dynamicbundles
    Directory: C:DevAngular2ProjectsIntroductionCodesrcTourOfHeroes2node_modules@angularplatform-brow
    ser-dynamicbundles
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是web应用程序的根目录。

原来,应用程序不允许请求在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,所以我不得不为node_modules文件源添加UseFileServer

[1] . net Core web应用程序默认不允许提供任何静态文件。您必须将Microsoft.AspNetCore.StaticFiles包添加到project.json,并以正确的顺序将这两行添加到Startup.Configure():

app.UseDefaultFiles();
app.UseStaticFiles();

相关内容

  • 没有找到相关文章

最新更新