在我的 ASP.NET MVC (3) 应用程序中,我在 global.asax.cs 中设置了以下路由:
routes.MapRoute(
"UniqueId",
"{uniqueId}",
new { controller = "Book", action = "DownloadBook" },
new { uniqueId = "[0-9a-zA-Z]{5}" }
);
DownloadFile 操作方法是:
public ActionResult DownloadBook(string uniqueId)
{
string path = Server.MapPath(String.Format("~/App_Data/Books/{0}/index.htm", uniqueId));
if (System.IO.File.Exists(path))
{
return File(path, "text/html");
}
return new EmptyResult();
}
该方法正确地为 /App_Data/Books 目录中的子目录中的 index.htm 文件提供服务,该文件的名称与路由中定义的 uniqueId 对应。但是,无法找到 index.htm 文件中的 CSS 和图像文件,因为浏览器会尝试在原始 URL 位置(例如http://localhost/3Yru3/)中找到它们。
对此我能做些什么吗?我可能忽略了什么?
编辑(另请参阅我的问题答案中的评论):
这些书籍存储为 HTML 文件(而不是 MVC 视图,这将使引用 CSS 和图像不成问题),因为:
1. 它们将被上传像这样的用户。
2. 我想将 index.htm 文件及其使用的资源存储在 HTML5 appcache 中,以便离线使用。
编辑 2我找到了解决我自己问题的方法,并想知道您对此有何看法。在下面的答案中查看我自己的答案。