将自定义路由添加到mvc项目

时间:2016-07-19 20:18:34

标签: asp.net-mvc razor

我正在创建一个用户也可以添加项目信息的系统。系统的一部分具有挂起项目的子表单。我试图了解如何设置路由,并想知道是否可以创建如下的路由。

/project/
/project/12345
/project/12345/bid - id is the same as the project e.g 12345
/project/12345/bid/create - id is the same as the project e.g 12345
/project/12345/bid/edit - id is the same as the project e.g 12345

这是一个好主意还是做得更好

/bid
/bid/create - id is the same as the project e.g 12345
/bid/12345 - id is the same as the project e.g 12345
/bid/12345/edit - id is the same as the project e.g 12345

2 个答案:

答案 0 :(得分:0)

没有太大的区别。但我会建议你使用第一个版本。除了/project之外的其他内容可以在以后出现。此类网址也更加明显和自我描述。

要实现这一点,请查看attribute routing。它将完美地满足您的需求。

示例:

[RoutePrefix("project")]
public class ProjectController : Controller
{
    // eg: /project
    [Route("")]
    public ActionResult Index() { ... }

    // eg: /project/1234
    [Route("{projectID:int}")]
    public ActionResult Project(int projectID) { ... }

    // eg: /project/1234/bid
    [Route("{projectID:int}/bid")]
    public ActionResult Bid(int projectID) { ... }

    // eg: /project/1234/bid/create
    [Route("{projectID:int}/bid/create")]
    Public ActionResult CreateBid(int projectID) { ... }

    // so on
}

不要忘记注册这样的路线:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    // other routes if you need

    routes.MapMvcAttributeRoutes();
}

答案 1 :(得分:0)

除非是公共网站,否则我会选择以下内容,然后我会在SEO的网址中添加小描述。

  

/出价/ 789

     

/出价/创建

     

/出价/编辑/ 12345

routes.MapRoute(
        name: "Default",
        url: "{controller}/{id}/{action}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );