使用一个属性为控制器中的所有操作添加路由前缀

时间:2018-02-10 15:29:43

标签: c# asp.net-mvc asp.net-mvc-routing

这是我的控制器

public class SpecializationsController : Controller
{    
    public ActionResult Action1()
    {
        //body
    }

    public ActionResult Action2()
    {
        //body
    }

Action1的默认网址当然是/Specialization/Action1。我想为我的控制器中的所有动作添加前缀,使我的ulr像/prefix/Specialization/Action1

我尝试将[RoutePrefix("prefix")]添加到我的控制器,但它不起作用。我想避免为控制器中的每个操作添加[Route]属性。那么我该如何添加这个前缀?

2 个答案:

答案 0 :(得分:1)

您需要为路线集添加路线,而不是使用路线属性

routes.MapRoute(
            "Route",
            "prefix/{controller}/{action}",
            new { controller = "Specializations", action = "Index" });

答案 1 :(得分:1)

我会创建Areas

  

区域是一个ASP.NET MVC功能,用于将相关功能组织到一个组中,作为单独的命名空间(用于路由)和文件夹结构(用于视图)。使用区域通过添加另一个路径参数

来创建用于路由的层次结构

我知道你可能认为仅仅有一个“前缀”是一种矫枉过正,但我​​建议这种方法的原因是因为如果你需要添加一个“前缀”,你可能需要将视图分开,模型等。