2016-07-09 59 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分開。