2017-12-27 487 views
0

我與這條路的動作中檢索index.html文件:腳本/樣式錶鏈接從wwwroot的回報擔任404

/services/parts/{number} 

wwwroot文件夾

... 
    return ContentResult(html, "text/html"); 

在wwwroot文件夾我有這樣的結構:

wwwroot 
| 
---services 
    | 
    ---parts 
     | 
     ---1 
     | 
     ---index.html 
     | 
     ---2 
     | 
     ---index.html 

// and so on 3,4, ... 

因爲我s在檢索index.file並返回它是沒有問題的,但是index.html文件中嵌入的所有鏈接/腳本無法加載,所以我得到這些鏈接的404。

然後我檢查爲什麼爲每個鏈接404:

請求的URL:URL:http://localhost:60000/services/parts/2/~/styles/vendor/bootstrap.min.css

在index.html的樣式錶鏈接:

<link rel="stylesheet" type="text/css" href="~/styles/vendor/bootstrap.min.css"> 

更改樣式錶鏈接:

<link rel="stylesheet" type="text/css" href="styles/vendor/bootstrap.min.css"> 

結果在請求的網址,沒有大的變化...

Requested url: URL:http://localhost:60000/services/parts/2/styles/vendor/bootstrap.min.css 

爲什麼在asp.net核心框架嘗試從路線服務/配件/ 2,而不是從款式/供應商的文件夾中的wwwroot文件夾下的子文件夾被下載bootstrap.min.css?

我該如何解決這個問題?

回答

1

首先,~實際上不被瀏覽器支持作爲URL的一部分。這是一個文件系統遺留問題,ASP.NET將用URL的文檔根部分替代。但是,只有當ASP.NET處理HTML時,纔會發生這種情況,這意味着它必須是ASPX,CSHTML等。如果您只是將一些HTML轉儲到響應中,則不會發生,並且~仍然存在,從而導致a 404.

在第二次嘗試中,您使用的是相對URL。當您有像styles/vendor...這樣的URL時,它將被粘貼到導航欄中URL的末尾,因此/service/parts/2/styles/vendor...

如果要從文檔根目錄指定路徑,則需要在URL前加上/。換句話說,/styles/vendor

+0

太棒了!新年快樂:-) – Pascal

+0

奇怪...它停止工作,沒有任何改變...所有CSS文件的路徑是正確的url http:// localhost:56071/styles/vendor/bootstrap.min.css我得到一個404.但是該文件正好放在wwwroot的路徑中。 – Pascal