ASP.NET MVC - .mvc路由在II6中失败

时间:2008-11-12 09:43:10

标签: asp.net-mvc iis-6 routing

我一直在试图在IIS6上部署我的MVC应用程序(linked question

我暂时取消了通配符映射,并试图让.mvc扩展程序正常工作。在IIS中正确配置了所有内容,.mvc扩展名指向所有动词类型​​的.NET dll(未选中验证是否存在选项)。

每次我发出请求时,我得到的只是.NET 404页面。 /Home.mvc和/Home.mvc/Index都返回该页面。

我没有对默认的Web.config进行任何更改,并且我的所有路由都配置了基于extenionless和extension的等价物。

我很欣赏这种配置对于每个阅读过的人来说都很容易(声音),但是我向你们保证,我没有做任何不同的事情,我的工作也不行。我甚至尝试将它部署在带有IIS6的不同服务器上,同样的问题也发生在那里。

路由模块/处理程序是否完全缺少请求并让它落入标准.NET 404错误,是否还有其他原因?奇怪的权限?

对于IIS 404错误,我更新了自定义错误设置,因此它在站点路由中调用了Default.aspx页面。这是Visual Studio中生成的MVC beta模板的默认页面,它在后面的代码中执行以下操作:

HttpContext.Current.RewritePath(Request.ApplicationPath);
IHttpHandler httpHandler = new MvcHttpHandler();
httpHandler.ProcessRequest(HttpContext.Current);

这就是我之前发布的错误:

[HttpException (0x80004005): The incoming request does not match any route.]
   System.Web.Routing.UrlRoutingHandler.ProcessRequest(HttpContextBase httpContext) +15589
   System.Web.Routing.UrlRoutingHandler.ProcessRequest(HttpContext httpContext) +40
   System.Web.Routing.UrlRoutingHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext context) +7
   ......

5 个答案:

答案 0 :(得分:3)

我的original problem已由Oli解决,他指出网站需要Global.asax文件。我使用NAnt / MSBuild来部署我的发布包,并且没有包含Global.asax文件。在我们所有的.NET 2项目中都可以忽略这个文件,并且已经使用了我们所有的NAnt部署结构,所以我没有想到它。

值得注意的是未来。我没有发现的东西,所以归功于Oli。再次感谢!

答案 1 :(得分:1)

尝试从最简单的配置开始。更改路由定义以使用.aspx而不是.mvc,并查看/home.aspx/index是否有效。

答案 2 :(得分:0)

  

我没有对此进行任何更改   默认Web.config和我的所有路由   配置extenionless和   基于扩展的等价物。

扩展和无扩展路由的顺序是什么?

我要么删除无扩展名(因为你正在使用扩展名),要么确保它在扩展路由后添加(由于路由的第一个匹配性质)。

另外,请查看http://www.asp.net/learn/mvc/tutorial-08-cs.aspx,然后仔细检查您是否正确设置了IIS(听起来就像这样)。

答案 3 :(得分:0)

非常感谢huey,也是通过那篇文章 - 一切都配置相同。

我的无扩展路由在扩展路由之前输出,纯粹是因为我打算使用ISAPI重写模块,并希望从路由表生成的任何URL都是干净的。然后将它们重新写入基于扩展的那些。

我现在甚至不关心无扩展名的URL,只是希望得到一个版本,所以我可以展示客户端!到目前为止,我真的非常喜欢MVC的东西,但这已经让事情变得光彩夺目。

再次感谢您的协助。

答案 4 :(得分:0)

Url重写可以帮助您解决问题。我已经实现了允许在任何IIS版本上部署MVC应用程序的解决方案,即使使用虚拟主机也是如此。 http://www.codeproject.com/KB/aspnet/iis-aspnet-url-rewriting.aspx