我可以定义这两条路线吗?我试过这个例子,但得到了404。
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new
{
controller = "Home",
action = "Index",
id = UrlParameter.Optional
}
);
routes.MapRoute(
name: "ActionFirst",
url: "{action}/{controller}/{id}",
defaults: new { controller = "Home",
action = "Index", id = UrlParameter.Optional }
);
以下控制器和操作:
public class HomeController : Controller
{
public ActionResult Index()
{
return Content("Hello, World!");
}
public ActionResult Foo()
{
return Content("I am the Foo action on the Home controller");
}
}
以下符合默认路线的网址:
http://localhost:xxxx/
http://localhost:xxxx/Home
http://localhost:xxxx/Home/Foo
但符合 ActionFirst 路线名称的那些,如下所列,不会:
http://localhost:xxxx/Foo
http://localhost:xxxx/Foo/Home
我希望ASP.NET路由引擎会针对所有路由尝试Url,如果路由对其中一个路由失败。
因此,如果url未能匹配第一个路由名称,它会尝试将其与第二个路由名称匹配。但事实并非如此。
当然,如果我删除了默认路由并且只有 ActionFirst 路由,那么第二批Urls就可以了。
答案 0 :(得分:0)
简答:否
稍微简短的回答:它不会尝试一条路线,然后是下一条路线,它只是从上到下找到第一条匹配的路线。在您的示例中,首先定义的路线将获胜。
你可以做什么(也许你想要的是什么?)[未经测试]
routes.MapRoute(
name: "HomeActions",
url: "{action}/{id}",
defaults: new {
controller = "Home",
action = "Index",
id = UrlParameter.Optional
},
constraints: new { id = @"\d+" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new {
id = UrlParameter.Optional
}
);
现在,您将以下路由到HomeController
http://yoursite.com/
http://yoursite.com/Foo
http://yoursite.com/Foo/123
以下路由到OtherController
http://yoursite.com/Other/Foo
http://yoursite.com/Other/Foo/123