Asp.net mvc 4 ASP.NET MVC 4:一个控制器的路由与其他控制器不同

Asp.net mvc 4 ASP.NET MVC 4:一个控制器的路由与其他控制器不同,asp.net-mvc-4,routing,controller,Asp.net Mvc 4,Routing,Controller,我在已经有多个控制器的MVC4应用程序中添加了一个新的控制器“LoggingController”。 现在我注意到这个控制器的路由行为与已经存在的不同 例如,以下两个URL按照预期正常工作,并在BlogController中命中“Index”方法 http://localhost:56933/Blog/ http://localhost:56933/Blog/Index 除我添加的控制器外,其他所有控制器也是如此: http://localhost:56933/Logging/Index-工

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

例如,以下两个URL按照预期正常工作,并在BlogController中命中“Index”方法

http://localhost:56933/Blog/

http://localhost:56933/Blog/Index
除我添加的控制器外,其他所有控制器也是如此:

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

public ActionResult Index(int? page, string Period, string LoggerProviderName, string LogLevel, int? PageSize)
http://localhost:56933/Logging/
-返回“/”应用程序中的服务器错误。找不到资源

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

这是LoggingController的索引签名

public ActionResult Index(int? page, string Period, string LoggerProviderName, string LogLevel, int? PageSize)
MapRoute中没有特定于某个控制器的内容。以下是完整的路线示意图供参考:

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

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

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"}

我懂了!我选择了默认值。奇怪的是,当我刚刚修改Index方法时,这还不够。当我删除并重新创建控制器+索引时,它开始按预期工作。不管怎样,现在一切都好了。