[英]Asp.Net 4.6 How to add a route prefix to controllers
I need to add one 'pathname' prior to some controllers in order to clarify their purpose. 我需要在某些控制器之前添加一个“路径名”,以阐明其用途。
For example, currently: 例如,当前:
/news/create
, /news/edit
, /event/create
, /event/edit
, /news/create
, /news/edit
, /event/create
, /event/edit
,
I wish their router could be 我希望他们的路由器可以
/request/news/create
, /request/news/edit
, /request/event/create
, /request/event/edit
/request/news/create
, /request/news/edit
, /request/event/create
, /request/event/edit
I tried to add the following code in RouteConfig.cs 我试图在RouteConfig.cs中添加以下代码
routes.MapRoute(
name: "Api",
url: "request/{controller}/{action}/{id}",
defaults: new { id = UrlParameter.Optional }
);
One of controllers EventController.cs 控制器之一EventController.cs
public class EventController : Controller{
[HttpPost]
public ActionResult Edit(int id, Events eventModel){
//code
}
[HttpPost]
public ActionResult Create(Events eventModel){
//code
}
}
Here I meet a problem: 在这里我遇到一个问题:
/request/event/create
404 error /request/event/create
404错误
/request/event/edit/1
works! /request/event/edit/1
有效!
/event/create
works! /event/create
作品!
/event/edit/1
works! /event/edit/1
有效!
So, my question is why /request/event/create
doesn't work and how to fix that? 所以,我的问题是为什么
/request/event/create
不起作用以及如何解决?
As far as I know, adding [Route("request/event/create")]
above Create action could make it work. 据我所知,在创建动作上方添加
[Route("request/event/create")]
可以使其正常工作。
---------Update-------- --------- --------更新
RouteConfig.cs RouteConfig.cs
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Index", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Api",
url: "request/{controller}/{action}/{id}",
defaults: new { id = UrlParameter.Optional }
);
}
}
Order of registered routes is important. 已注册路线的顺序很重要。 Move more specific routes to before general routes
将更具体的路线移到通用路线之前
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: "Api",
url: "request/{controller}/{action}/{id}",
defaults: new { id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Index", action = "Index", id = UrlParameter.Optional }
);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.