我跟随answer到this question但是当我应用它时,如果我尝试访问其他控制器下的视图,我会收到错误。
如果我去http://mydomain/MyActionUnderHome
它可以正常工作,但如果我去http://mydomain/SomeOtherController/MyAction
就会抛出
“无法找到资源。”
如果URL与默认路由上方的路由定义不匹配,默认路由是否应该接管?
MVC 5中是否有新方法可以做到这一点?
我的路线:
routes.MapRoute(
"HomeRoute",
"{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
"AccountRoute",
"{action}/{id}",
new { controller = "Account", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
答案 0 :(得分:2)
最好使用Route
属性。
public class HomeController : Controller
{
[Route("")]
public ActionResult Index() { return View(); }
[Route("MyAccount")]
public ActionResult Account() { return View(); }
}
然后在RouteConfig
routes.MapRoute
课程中添加此行
routes.MapMvcAttributeRoutes();
答案 1 :(得分:1)
问题是路由器无法正确解析路由冲突
routes.MapRoute(
"HomeRoute",
"{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
"AccountRoute",
"{action}/{id}",
new { controller = "Account", action = "Index", id = UrlParameter.Optional }
);
当路由器查看路径/youraction/yourparameter
时,它将解析为第一条路径。
下一部分是当您提供两个值作为您的URL时(在您的示例中,默认路由器永远不会被调用,因为路由器将您的输入解释为/action/id
而不是controller/action/id
如果您将路线更改为:
routes.MapRoute(
"HomeRoute",
"index/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
然后你会得到你的效果。但是你的第二条路线仍然无法调用,因为你的方案不正确。