6

我可能对 ASP.NET 期望过高,但在 Apache 中,重写 url 很简单,因此请求类似: http://mysite/myfolder/mypage/niceurlparameter 实际上设法提供静态页面http://mysite/mypage.html

我如何在 Global.asax 中做到这一点?

我试过这个:

RouteTable.Routes.MapPageRoute("Static HTML", "myfolder/{page}/*", "~/myfolder/{page}.html");

但是当我请求http://mysite/myfolder/mypage/niceurlparameter时,它一直返回 404 。

但是,这有效:

RouteTable.Routes.MapPageRoute("Static HTML", "myfolder/{page}.html/*", "~/myfolder/{page}.html");

所以我在请求http://mysite/myfolder/mypage.html/niceurlparameter 时确实得到了 mypage.html

我只想摆脱我的网址中的“.html”部分。我错过了什么?

更新:由于某种原因,在前一种情况下,“*”通配符未被接受。

更改为:

RouteTable.Routes.MapPageRoute("Static HTML", "myfolder/{page}/{whatever}", "~/myfolder/{page}.html");

似乎将请求路由到 html 页面,但随后出现错误:

There is no build provider registered for the extension '.html'. 

为什么在世界上它只能在前一种情况下工作(在 URL 中使用 html),而不是在 html 被忽略时?

4

1 回答 1

3

没有为扩展“.html”注册构建提供程序

您收到此错误是因为静态 html 文件应由 IIS 直接处理。但是,在您的情况下,ASP.NET MVC 框架正在尝试处理.html它无法处理的 type 文件。

因此,如果您认为这是您需要做的,您将必须创建一个新的提供程序并在 web.config 文件中注册。看这个

ASP.NET 的自定义文件扩展名 - 需要帮助!

您可以简单地将静态 html 内容更改为 .aspx 文件。一个简单的复制和粘贴就可以完成这项工作,它应该可以正常工作。它将知道如何处理文件类型。

于 2012-04-27T11:30:11.763 回答