简体   繁体   English

Asp.Net 4.6如何向控制器添加路由前缀

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM