2016-07-09 27 views
0

我创建了一个包含多个区域的asp.net core 1.0网站项目。当文件超出wwwroot时,静态文件未找到/提供给SPA

在应用area`s的HomeController我有这样的动作:

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

当HTML文件被返回许多404错误从没有发现的JavaScript库出现在浏览器中的文件。

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

该SPA构建+部署到websiteproject/areas/application/App文件夹。

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

我想这意味着静态文件路径总是相对于wwwroot来使SPA工作。

问题1:有没有办法通过与WebHostBuilder类配置wwwroot文件夹作为wwwroot文件/应用程序路径:

.UseWebRoot("./wwwroot/app") 

只是明确应用领域

这意味着wwwroot的网站应该继续工作?

我会做到最好的事情是有2子文件夹的wwwroot文件夹:

  • 网站
  • 应用

,我想配置2 wwwroot`s路径的网站和应用的默认“区域”和显式应用区域。

问题2:我该怎么做?

更新1

据帕维尔评论我改变:

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目录中一样可用?

在由单页的应用程序所要求的开发者控制台工具:

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

在浏览器地址栏手动输入:

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

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

我将我的文件结构的屏幕截图,你们更好地理解我的问题或可能发现我的用户错误...:

enter image description here

+0

你看过这篇文章:https://docs.asp.net/en/latest/fundamentals/static-files.html? – Pawel

+0

Pawel我更新了我的问题,并给你评论! – Pascal

+0

好吧,我发现了这个问题。它是我的我的角2应用程序和index.html。在构建期间,路径vendor/angular2.js对于调试应用程序是正确的。但是当我启动asp.net网站时,由于Startup.cs中的静态文件路径变化,供应商的路径需要Application/vendor。即使当我更改index.html中的所有路径时,它也可以找到它无法找到的每个component.ts文件。似乎我必须创建一个新的system.js模块加载程序的问题,关于预先加载'应用程序'时,其模块加载每个组件等... – Pascal

回答

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文件从目录路径服务:

“区域/应用程序/应用程序” 当URL“/应用“被输入。

此外,我不得不将'应用程序'预先添加到主应用程序和根桶'应用程序'中。

的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核心区域“应用程序”有自己的“wwwroot”从公共网站wwwroot分开。