当文件位于wwwroot

时间:2016-07-09 17:15:14

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

我创建了一个包含多个区域的asp.net核心1.0网站项目。

在应用程序区域的HomeController中,我有这个动作:

public IActionResult Index()
{
    string content = System.IO.File.ReadAllText("./Areas/Application/App/Index.html");
    return base.Content(content, new MediaTypeHeaderValue("text/html"));
}

当返回html文件时,我的浏览器会发现许多来自未找到的javascript库文件的404错误。

index.html及其所有.js文件是asp.net核心网站区域内的SPA。

此SPA已构建并部署到websiteproject / areas / application / App文件夹。

当我构建+将SPA 部署到wwwroot 文件夹时,会找到所有静态文件

我想这意味着静态文件路径始终与wwwroot相关,以使SPA工作。

问题1 :有没有办法通过WebHostBuilder类将wwwroot文件夹配置为wwwroot / app路径:

 .UseWebRoot("./wwwroot/app")
对于应用领域

只是明确

这意味着该网站的wwwroot应继续有效吗?

我要做的最好的事情是一个包含2个子文件夹的wwwroot文件夹:

  • 网站
  • 应用

我想配置2个wwwroot的路径网站和应用程序默认'区域'和明确的应用领域。

问题2:我该怎么做?

更新1

根据Pawel评论,我改变了:

   app.UseStaticFiles();

app.UseStaticFiles();
app.UseStaticFiles(new StaticFileOptions()
{
    FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "Areas","Application", "App")),
    RequestPath = new PathString("/Application")
});

但是我仍然得到.js文件的404错误,好像它们在wwwroot目录中不可用???

404   在单页面应用程序请求的开发人员控制台工具中:

http://localhost:52159/vendor/reflect-metadata/Reflect.js (404)

200   在浏览器网址栏中手动输入:

http://localhost:52159/Application/vendor/reflect-metadata/Reflect.js

这是否意味着asp.net核心中的静态文件服务有效,但是还有其他什么不能以某种方式工作?我想我不应该在SPA中改变那些愚蠢的东西......

我添加了我的文件结构的屏幕截图,您可以更好地了解我的问题或者可能发现我的用户错误...:

enter image description here

1 个答案:

答案 0 :(得分:0)

现在我找到了一个必须应用更改的解决方案。

<强> system.config.ts

System.config({
  map: {
    '@angular': 'Application/vendor/@angular',
    'rxjs': 'Application/vendor/rxjs',
    'main': 'Application/main.js',
    'app': 'Application/app',
  },
  packages: cliSystemConfigPackages
});

这样,所有角度2 / rxjs文件都从目录路径提供:

&#34;区/应用/应用程序&#34;当网址&#34; /应用&#34;进入了。

此外,我还必须在“应用程序”之前添加&#39;到主要和根桶#app。#。

<强>的index.html

<body>
  <app-root>Loading...</app-root>

    {{#each scripts.polyfills}}
    <script src="Application/{{.}}"></script>
    {{/each}}
    <script>
      System.import('Application/system-config.js').then(function () {
        System.import('Application/main.js');
      }).catch(console.error.bind(console));
    </script>
</body>
</html>

这些是index.html文件中的更改。

现在我的Asp.net核心领域&#39;应用程序&#39;有自己的&#34; wwwroot&#34;与公共网站的wwwroot分开。