ASP.NET MVC 4路由匹配,但从不调用Controller

问题描述 投票:2回答:2

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

SiteController

/// 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();
    }
}

RouteConfig

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
c# asp.net asp.net-mvc asp.net-mvc-4
2个回答
2
投票

结果我的BaseController类导致404错误。不知道为什么,还要检查那个项目,但是现在我已经恢复了SiteController继承Controller作为默认值。

UPDATE

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


0
投票

如果你的想法用完了,我建议你调试这个问题的步骤......

  1. 使用vs2012项目模板在机器上设置一个空的默认MVC项目,运行它并确保一切正常
  2. 添加基本​​控制器并在项目模板的DefaultController中使用它,并确保默认控制器仍然有效。
  3. 用自定义路由替换默认路由,并确保默认路由仍然有效
  4. 将_site.cshtml添加到默认值并确保它仍然有效。
  5. 添加sitecontroller并更改路由到该路由
© www.soinside.com 2019 - 2024. All rights reserved.