【问题标题】:ASP.NET MVC - .mvc Routing just fails in II6ASP.NET MVC - .mvc 路由在 II6 中失败
【发布时间】:2008-11-12 09:43:09
【问题描述】:

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

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

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

我没有对默认的 Web.config 进行任何更改,并且我的所有路由都配置了无扩展和基于扩展的等效项。

我很欣赏这个配置对于​​每个阅读它的人来说是多么容易(听起来),但我向你保证我没有做任何不同的事情,我的也不会工作。我什至尝试用 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
   ......

【问题讨论】:

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


    【解决方案1】:

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

    未来需要注意的事项。我没有发现的东西都归功于Oli。再次感谢!

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 这是正确的答案。我昨晚在 CrystalTech 上得到了这个工作。如果在我回家时没有发布更好的答案,我将发布我的路线。确保您的默认路由也在控制器上使用 .aspx。
      • 已发布答案 - 不包括 Global.asax - 现在听起来很简单,但我认为配置将编译到应用程序中而不需要存根文件。
      【解决方案3】:

      我没有对 默认 Web.config 和我的所有路由 配置有无扩展和 基于扩展的等价物。

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

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

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

      【讨论】:

        【解决方案4】:

        谢谢huey,也看过那篇帖子——所有配置都一样。

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

        虽然目前我什至不关心无扩展名的 URL,但我只想让一个版本正常工作,这样我就可以向客户展示!到目前为止,我真的很喜欢 MVC 的东西,但这已经让事情失去了光彩。

        再次感谢您的帮助。

        【讨论】:

        • 在我的设置中,如果我同时配置了扩展和无扩展并首先声明了无扩展,则路由将失败。我假设路由引擎最初是匹配的,然后 IIS 被赋予非基于扩展的 url。我会删除无扩展并尝试看看。
        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多