index.html文件中的脚本/样式表链接由wwwroot返回404提供

时间:2017-12-27 20:17:23

标签: asp.net-core asp.net-core-2.0

我正在使用该路由检索操作中的index.html文件:

/services/parts/{number}

来自 wwwroot 文件夹

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

在wwwroot文件夹中,我有这样的结构:

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

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

正如我之前所说,检索index.file并返回它没有问题,但是嵌入的index.html文件中的所有链接/脚本都无法加载,所以我得到了404这些链接。

然后我检查了为什么每条链接都有404:

请求的网址:网址: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下载bootstrap.min.css而不是从wwwroot文件夹下的子文件夹的styles / vendor文件夹下载?

如何正确修复?

1 个答案:

答案 0 :(得分:1)

首先,浏览器实际上并不支持~作为网址的一部分。这是一个文件系统遗留物,ASP.NET将替换为URL的文档根部分。但是,只有在ASP.NET处理HTML时才会发生这种情况,这意味着它必须是ASPX,CSHTML等。如果只是将一些HTML转储到响应中,那么就不会发生这种情况,~遗骸,导致404。

在第二次尝试中,您使用的是相对网址。如果您有styles/vendor...之类的网址,则会将其贴在导航栏中网址的末尾,即/service/parts/2/styles/vendor...

如果要指定文档根目录中的路径,则需要在URL前加/。换句话说,/styles/vendor