【发布时间】:2014-10-02 09:10:53
【问题描述】:
Asp.net Mvc Url MapRoute 不识别没有 Action 的 rout:
错误:在控制器上找不到公共操作方法
routes.MapRoute(
"WorldWithoutAction",
"World/{id}/{name}",
new { id = UrlParameter.Optional, name = UrlParameter.Optional },
new[] { "MyProject.Web.Controllers" });
虽然尝试这个来捕捉 World/Details 但发生了同样的错误:
routes.MapRoute(
name: "World",
url: "World",
defaults: new { controller = "World", action = "Details" }
);
我应该怎么做才能将http://domain.com/world/1/australia 捕获到http://domain.com/world/details/1? 似乎它只是接受操作而不是 url 中的 {id}。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new[] { "MyProject.Web.Controllers" });
routes.MapRoute(
"Default2",
"{controller}/{action}/{id}/{name}",
new { controller = "Agency", action = "Show", id = UrlParameter.Optional, name = UrlParameter.Optional },
new[] { "MyProject.Web.Controllers" });
routes.MapRoute(
"Default3",
"{controller}/{action}/{id}/{name}",
new { id = UrlParameter.Optional, name = UrlParameter.Optional },
new[] { "MyProject.Web.Controllers" });
routes.MapRoute(
"WorldWithoutAction",
"World/{id}/{name}",
new { id = UrlParameter.Optional, name = UrlParameter.Optional, action = "Details" },
new[] { "MyProject.Web.Controllers" });
routes.MapRoute(
name: "World",
url: "World",
defaults: new { controller = "World", action = "Details" }
);
}
【问题讨论】:
-
在第一种情况下,您需要为与控制器操作方法的名称匹配的操作添加一个默认值。在第二个中,您是否有一个名为
WorldController的控制器和一个名为Details的方法? -
是的,我有 WorldController 和 Details(int id)
-
您是否尝试过在第一种情况下添加像
new { id = UrlParameter.Optional, name = UrlParameter.Optional, action = "Details" },这样的默认操作? -
在控制器上找不到公共操作方法“1”。在添加第一个案例之后。
-
是在这些路由之前定义的默认路由吗?因为看起来默认的
{controller}/{action}/{id}路由正在被使用?
标签: asp.net asp.net-mvc url-rewriting