2017-12-27 878 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