【问题标题】:Issue with serving some static files within ASP.NET Core MVC在 ASP.NET Core MVC 中提供一些静态文件的问题
【发布时间】:2025-03-07 03:15:01
【问题描述】:

我遇到了 ASP.NET Core 无法正确提供静态文件的问题。我在 wwwroot 下的 node_modules 中有部分应用程序。在大多数情况下,所有文件都有效,但也有例外。 *.js.map 文件被路由到 MVC 控制器,为我的 MVC 页面而不是实际文件提供服务。结果,我在浏览器中收到错误,例如

SourceMap解析失败:http://localhost:5000/node_modules/bootstrap/bootstrap.min.css.map

走同样的路,我的 web 字体,比如 Bootstrap 中包含的字体,也没有得到正确的服务,也由 MVC 中间件而不是静态文件中间件处理。似乎所有驻留在 node_modules 中的文件都应该路由到我的静态文件中间件,这并没有发生。 谢谢。

公共无效配置(IApplicationBuilder 应用程序,IHostingEnvironment env,ILoggerFactory loggerFactory) { loggerFactory.AddConsole(); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseStaticFiles(); app.UseStaticFiles(新的静态文件选项 { FileProvider = new PhysicalFileProvider(Path.Combine(env.WebRootPath, @"node_modules")), RequestPath = new PathString("/node_modules"), ServeUnknownFileTypes = true }); app.UseMvc(配置 => { config.MapRoute("默认", "{controller}/{action}/{id?}", 新的{控制器=“家”,动作=“索引”}); config.MapRoute("AngularDeepLinkingRoute", "{*url}", 新的{控制器=“家”,动作=“索引”}); }); }

【问题讨论】:

    标签: asp.net-core .net-core asp.net-core-mvc


    【解决方案1】:

    问题是,如果缺少一个静态文件,例如 *.js.map 文件,静态文件中间件不会处理请求,它会转到 MVC 中间件。

    【讨论】:

      【解决方案2】:

      去掉后面的代码,完全不需要

      app.UseStaticFiles(new StaticFileOptions
              {
                  FileProvider = new PhysicalFileProvider(Path.Combine(env.WebRootPath, @"node_modules")),
                  RequestPath = new PathString("/node_modules"),
                  ServeUnknownFileTypes = true
      
              });
      

      仅使用以下代码

      app.UseStaticFiles();
      

      如果 node_module 目录位于 wwwroot 目录下,则 node_module 中的内容将被视为静态内容。静态文件存储在项目的 Web 根目录中。默认目录是 /wwwroot。

      详情请参考以下链接 Microsoft Docs - Working with static files

      【讨论】: