Asp.net 这个Global.asax路由设置有什么问题?

Asp.net 这个Global.asax路由设置有什么问题?,asp.net,url-routing,asp.net-routing,Asp.net,Url Routing,Asp.net Routing,我可能对ASP.NET期望过高,但在Apache中,重写URL以请求如下内容是很简单的: 实际上是设法服务于静态页面 如何在Global.asax中做到这一点 我试过这个: RouteTable.Routes.MapPageRoute("Static HTML", "myfolder/{page}/*", "~/myfolder/{page}.html"); 但当我请求时,它总是返回404 然而,这是可行的: RouteTable.Routes.MapPageRoute("Static HTM

我可能对ASP.NET期望过高,但在Apache中,重写URL以请求如下内容是很简单的: 实际上是设法服务于静态页面

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

我试过这个:

RouteTable.Routes.MapPageRoute("Static HTML", "myfolder/{page}/*", "~/myfolder/{page}.html");
但当我请求时,它总是返回404

然而,这是可行的:

RouteTable.Routes.MapPageRoute("Static HTML", "myfolder/{page}.html/*", "~/myfolder/{page}.html");
因此,当请求时,我会得到mypage.html

我只想去掉URL中的“.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的情况下工作

没有为扩展“.html”注册生成提供程序

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

所以,如果您认为这是您需要做的,那么您必须创建一个新的提供者并在web.config文件中注册。看看这个



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

您正在运行哪个版本的IIS?我似乎记得IIS 6不允许这种开箱即用,您需要添加一个通配符映射。有关可能的解决方案,请参阅此问题:IIS是v7.5。建议的链接有帮助。谢谢,我接受这一点,因为它实际上解决了这个问题。但是,我从来没有写过任何最终允许web服务器提供静态文件的自定义内容(!?!)如果你想要静态文件重定向,URL重写是一种更好的方法。IIS 7.5和URL重写2模块就是最好的选择。