我創建了一個包含多個區域的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那將是愚蠢的東西...
我將我的文件結構的屏幕截圖,你們更好地理解我的問題或可能發現我的用戶錯誤...:
你看過這篇文章:https://docs.asp.net/en/latest/fundamentals/static-files.html? – Pawel
Pawel我更新了我的問題,並給你評論! – Pascal
好吧,我發現了這個問題。它是我的我的角2應用程序和index.html。在構建期間,路徑vendor/angular2.js對於調試應用程序是正確的。但是當我啓動asp.net網站時,由於Startup.cs中的靜態文件路徑變化,供應商的路徑需要Application/vendor。即使當我更改index.html中的所有路徑時,它也可以找到它無法找到的每個component.ts文件。似乎我必須創建一個新的system.js模塊加載程序的問題,關於預先加載'應用程序'時,其模塊加載每個組件等... – Pascal