2012-04-27 21 views
5

我也许希望从ASP.NET太多,但在Apache中是微不足道的重写URL请求等等类似: http://mysite/myfolder/mypage/niceurlparameter 实际上设法提供静态页面http://mysite/mypage.html此Global.asax路由设置有什么问题?

我该怎么做,在Global.asax中?

我已经试过这样:

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

但它一直返回404,当我要求http://mysite/myfolder/mypage/niceurlparameter

然而,这个工程:

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'. 

为什么在世界上它只是在前者的情况下工作(与HTML中的URL),而不是当HTML被遗漏了吗?

+0

您运行的是哪个版本的IIS?我似乎记得IIS 6不会允许这个开箱即用,您需要添加通配符映射。 – 2012-04-27 08:58:14

+1

看到这个问题的可能的解决方案:http://stackoverflow.com/q/9918066/25727 – Jan 2012-04-27 09:01:07

+0

IIS是v7.5。建议的链接有帮助。谢谢 – tishma 2012-04-27 11:11:14

回答

3

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

您会收到此错误消息,因为应直接由IIS处理静态html文件。但是,在你的情况下,ASP.NET MVC框架试图处理.html类型的文件,但它不能。

所以,如果你认为这是你需要做的,你将不得不建立一个新的提供者,并在web.config文件中注册。看看这个

Custom file extensions for ASP.NET - help needed!

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

+1

我接受这个,因为它实际上解决了这个问题。但是,我永远不会写任何自定义,最终将允许Web服务器提供静态文件(!?!) URL重写是一种更好的途径采取,如果你想要静态文件重定向。IIS 7.5和URL重写2模块是要走的路。 – tishma 2012-04-28 11:42:32