我创建了一个包含多个区域的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中改变那些愚蠢的东西......
我添加了我的文件结构的屏幕截图,您可以更好地了解我的问题或者可能发现我的用户错误...:
答案 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分开。