问题描述
我在网络驱动器(与我的服务器运行的网络相同)上有一个 html 文件,我想向用户展示它。所以我尝试执行以下操作:
@Html.Raw(File.ReadAllText("//path/on/netwotk/drive.html")
问题是html文件引用了同一文件夹下的其他文件(主要是js脚本)
并且服务器会尝试在他的 url (localhost/relative/path/to/file
) 而不是网络驱动器中查找它们。
解决方法
您尝试做的是非常糟糕的做法。你不应该这样做。
工作原理
当您调用以下方法时:
@Html.Raw(File.ReadAllText("//path/on/netwotk/drive.html")
HTML 帮助程序在您的服务器端运行。它从您指定的文件中加载所有内容,并将其完全按照文件中写入的方式发送到浏览器。它只读取那个特定的文件,只读取那个文件。
浏览器中的客户端标记不了解网络驱动器上的文件夹。它不可能知道它。浏览器可以在任何人的设备上。
当您的浏览器在 HTML 标记中看到相对路径时,它会尝试发送 GET HTTP 请求来获取这些路径。它将使用的地址将具有与原始页面相同的基本 URL,后跟 HTML 中指定的相对路径。它找不到它,因为没有这样的东西。该地址不存在该文件。
您在 HTML 中看到的路径与文件夹结构无关。它们与浏览器可以访问的地址有关。只是如果您将静态资源放入主机上的实际文件夹中,这些路径将映射到浏览器中基本 URL 之后的路径。
你应该怎么做
在现实生活中,您不会希望通过某个远程文件夹访问 HTML、JavaScript 和 CSS。只需将它们放入实际主机上的文件夹中即可。它们应该是您实际应用程序的一部分。为多个环境拥有多个副本是完全可以接受的。
在 ASP.NET 应用程序的上下文中,这些资源称为静态文件。您可以启用这些功能,就像您在运行一个老式网站一样。您可以在此处找到有关如何使用它们的文档:
您的另一种选择是重写这些 HTML 文件中的代码并将其放入您的 Razor 视图中。