0

我已将一个新控制器“LoggingController”添加到已经有多个控制器的 MVC 4 应用程序中。现在我注意到这个控制器的路由行为与已经存在的不同。

例如,以下两个 url 按预期正常工作,并点击了 BlogController 中的“Index”方法。

http://localhost:56933/Blog/

http://localhost:56933/Blog/Index

除了我添加的控制器之外,所有其他控制器也是如此:

http://localhost:56933/Logging/Index- 正常工作,点击 LoggingController 中的“Index”方法

http://localhost:56933/Logging/- 返回“'/' 应用程序中的服务器错误。找不到资源。”

除了显而易见的事情,我应该从哪里开始寻找?

这是来自 LoggingController 的索引签名

public ActionResult Index(int? page, string Period, string LoggerProviderName, string LogLevel, int? PageSize)

MapRoute 中没有特定于某个控制器的内容。这是完整的 RouteConfig 供参考:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );

    routes.MapRoute(
    name: "Display",
    url: "Post/{id}/{seofriendly}",
    defaults: new { controller = "Post", action = "Display", id = UrlParameter.Optional, seofriendly = ""}
        );

    routes.MapRoute(
        name: "SEOFriendly",
        url: "{controller}/{action}/{id}/{seofriendly}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional, seofriendly = "" }
    );

    routes.MapRoute(
        name: "SEOFriendlyNoId",
        url: "{controller}/{action}/{seofriendly}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional, seofriendly = "" }
    );

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

1 回答 1

2

您的 Index 方法实际上没有与您的任何可用路由匹配的签名。您必须为您的索引操作提供默认值,或者在路由表的开头添加一个额外的路由来指定这些默认值。例如:

routes.MapRoute(
    name: "LoggingDefaults",
    url: "Logging/{Period}/{LoggerProviderName}/{LogLevel}/{page}/{PageSize}",
    defaults: new {controller = "Logging", 
                   action = "Index",
                   page = UrlParameter.Optional,
                   PageSize = UrlParameter.Optional,
                   LoggerProviderName = "SomeProvider",
                   Period = "SomePeriod",
                   LogLevel = "SomeLevel"}
于 2013-03-05T22:53:01.233 回答