控制器未正确激活

时间:2011-12-23 16:07:30

标签: asp.net-mvc-3

我在我的项目中添加了一个名为UserManager的控制器(自动从ado.net框架生成)

当我启动应用程序时,尝试导航到http://server/UserManager/会遇到404错误,但如果我转到http://server/UserManager/Index,则会找到并正确执行操作。

这是控制器未被调用的情况还是仅仅没有将index视为默认操作。这些属性设置在哪里?

更新

似乎问题来自于默认路由设置为

的事实
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Permits", action = "ListApplications", id = UrlParameter.Optional }

这与Usermanager的命名方案(默认为Index)

冲突

我努力与ohow一起添加提供默认操作的备用路由,但最终发现路由添加的顺序决定了哪条路由接受了请求(路由添加越早,符合条件的可能性就越大) 。)

由于

2 个答案:

答案 0 :(得分:2)

您需要确保默认路由映射将“Index”指定为global.asax文件中的默认操作。

检查global.asax文件中是否有以下设置:

   routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
        );

回复你的评论:

仅通过添加新的路由映射。您还需要知道将应用第一个匹配的路由映射,因此您在Global.asax中指定映射的顺序至关重要。
例如,我们希望FAQ控制器使用URL http://domain/faq/ {id}而不指定URL中指定的操作,因此我们在默认值之前声明了以下映射:

routes.MapRoute("Faq", "Faq/{id}", new { controller = "Faq", action = "Answer" });

答案 1 :(得分:1)

在Global.asax.cs中,检查是否设置了默认路由:

routes.MapRoute(
    "Default", 
    "{controller}/{action}/{id}", new {
        controller = "Home", 
        action  = "Index", 
        id = UrlParameter.Optional}
);

另外,检查控制器是否被调用UserManagerController,并从Controller

派生