Asp.net mvc 4 ASP.NET MVC 4:一个控制器的路由与其他控制器不同
我在已经有多个控制器的MVC4应用程序中添加了一个新的控制器“LoggingController”。 现在我注意到这个控制器的路由行为与已经存在的不同 例如,以下两个URL按照预期正常工作,并在BlogController中命中“Index”方法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-工
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方法时,这还不够。当我删除并重新创建控制器+索引时,它开始按预期工作。不管怎样,现在一切都好了。