【问题标题】:Upgrading from ASP.NET MVC 3 to ASP.NET MVC 4 leads to 404 errors从 ASP.NET MVC 3 升级到 ASP.NET MVC 4 会导致 404 错误
【发布时间】:2013-03-19 15:38:24
【问题描述】:

我刚刚将 ASP.NET MVC 3 升级到带有 .NET 4.5 的 ASP.NET MVC 4 并且根控制器正在工作,但 MVC 区域中的控制器开始出现 404 错误。

我查找了 IIS 7 QFE 补丁,但它不适用于 windows 8。通过设置断点,我可以看到该区域已成功注册,并且在完成注册后,我看到在路由集合中注册了 4 个路由和第一个是区域对应的路线。但是任何对区域 url 的请求都只会落入 404 错误。

【问题讨论】:

    标签: asp.net-mvc-4 area asp.net-4.5


    【解决方案1】:

    我将这个答案留给在升级过程中遇到问题的每个人。

    我有一个针对 ASP.NET MVC 3 编译的业务逻辑库(不同的 .NET 类库)。

    如果您在 ASP.NET MVC 4 项目中使用对针对 ASP.NET MVC 3 编译的其他库的任何引用,则 Web 服务器不会引发任何错误,而是无法加载依赖于的控制器外部库,因此它不会显示加载错误,而是简单地抛出 404 错误,因为它假定未找到控制器。

    如果它们不依赖于针对 MVC3 编译的外部库,则在同一区域中定义的控制器运行良好。

    简而言之,“任何控制器,取决于针对 MVC3 编译的任何库中的类型,都不会加载,并且会引发 404 错误”。

    理想情况下它应该引发错误。

    【讨论】:

    • 其实这是有道理的。当您作为 MVC4 应用程序运行时,注册区域将导致它在命名和类型继承中查找某些约定,并且就它而言,您的外部项目中没有任何继承自它正在寻找的 MVC4 类,因此它假定程序集中没有区域,不注册任何路由,并为您提供标准 404 消息。
    • 我的区域不在外部项目中,我的区域在同一个 MVC4 Web 应用程序中,问题只是一些从外部项目中定义的针对 MVC3 编译的类型派生的控制器不起作用。同一区域的其他控制器确实工作正常。
    猜你喜欢
    • 2012-04-10
    • 1970-01-01
    • 2016-06-29
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    • 2011-08-03
    • 2014-08-12
    相关资源
    最近更新 更多