ASP.NET MVC 4 路由匹配,但控制器从不调用

本文关键字:控制器 调用 MVC NET 路由 ASP | 更新日期: 2023-09-27 18:33:19

我一直在为VS 2010中的新 ASP.NET MVC 4项目而苦苦挣扎。我有一个非常基本的设置,包括单个控制器(SiteController),单个路由({action})和单个视图(Views/Site/Default.cshtml)。出于某种原因,我无法让它显示视图,即使路由根据 RouteDebugger 匹配,我得到的只是 404 错误。我以为是卡西尼是个混蛋,所以我安装了IIS 7,但它仍然无法正常工作。以下是相关代码:

站点控制器

/// Note: BaseController is in a different assembly I use to extend MVC and it works fine because I use it in a dozen other projects.
public class SiteController : BaseController {
    public ActionResult Default() {
        return base.View();
    }
}

路由配置

public class RouteConfig {
    public static void RegisterRoutes(
        /// http(s)://{host}/{action}
        routes.MapRoute("6354af93-f979-44a4-ba9b-cc8ab775edf6", "{action}", new {
            action = "Default",
            controller = "Site"
        });
        /// http(s)://{host}/{*any}
        routes.MapRoute("04b41915-4455-4c11-96c2-38e6aedf929f", "{*any}", new {
            action = "Default",
            controller = "Site"
        });
    }
}

以下是项目的文件夹结构:

App_Start
    BundlesConfig.cs
    FilterConfig.cs
    NinjectWebCommon.cs
    RouteConfig.cs
Controllers
    SiteController.cs
Models
Views
    Shared
        _Site.cshtml
    Site
        Default.cshtml
    Web.config
Global.asax
packages.config
Web.Config

ASP.NET MVC 4 路由匹配,但控制器从不调用

事实证明,我的BaseController类导致了 404 错误。不知道为什么,也必须检查该项目,但现在我已经恢复了默认从Controller继承SiteController

更新

在过去的几个小时里,我重新构建了一个 .NET 扩展解决方案,其中包含我上面引用的BaseController。我使用 v4 程序集重新定位它,并能够将其重新插入。所以,我想我使用引用 v3 程序集的扩展是有错的。

如果您的想法用

完了,我会建议用于调试问题的步骤......

  1. 使用 vs2012 项目模板在计算机上设置一个空的默认 MVC 项目,运行它并确保一切正常
  2. 添加基本控制器并在项目模板的 DefaultController 中使用它,并确保默认控制器仍然有效。
  3. 将默认路由替换为自定义路由,并确保默认路由仍然有效
  4. 将 _site.cshtml 添加到默认值,并确保它仍然有效。
  5. 添加站点控制器
  6. 并更改路由以路由到该站点控制器