MVC路由以GUID作为ID类型的问题

时间:2016-12-08 01:40:30

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

我的路线存在轻微问题,我不能100%确定如何解决。

我有一个名为Project的控制器,我试图进行以下网址设置 site.com/project/(返回所有项目)site.com/project/GUID(site.com/Project/60724573-5949-48ee-873a-8f8e3ea7dd48)返回单个项目(完全不同的视图)

项目管理员:

[RequireHttps]
public class ProjectController : Controller
{
    [HttpGet]
    // Get: /Project
    public ActionResult Index()
    {
        // get list of projects and return list
        return View();
    }


    [Route("Project/{id:Guid}")]
    [HttpGet]
    // Get: /Project/ID
    public ActionResult Project(Guid id)
    {
        // get project object from DB based on ID passed
        //return View(model);
        return View();
    }
}

在我的路线中,我尝试了2种路线设置:

首先:

routes.MapRoute(
                name: "Project",
                url: "{controller}/{action}",
                defaults: new {controller = "Project", action = "Index"}
            );

这允许我获得/ project /列出所有项目

我开始做一些研究,发现我可以通过这样做来完成路线的工作。

            routes.MapRoute( 
           name: "AllProjects",
            url: "Project/",
            defaults: new
            {
                controller = "Project",
                action = "Index"
            });

然后我可以修改我的控制器来做这样的事情:

[Route("Project/")]
    [ActionName("AllProjects")]
    [HttpGet]
    // Get: /Project
    public ActionResult Index()
    {
        storeSession();
        // get list of projects and return list
        return View();
    }

    [Route("Project/{id}")]
    [ActionName("SingleProject")]
    [HttpGet]
    // Get: /Project/ID
    public ActionResult Index(Guid id)
    {
        storeSession();

        // get project object from DB based on ID passed
        //return View(model);
        return View();
    }

我似乎陷入了一个小小的僵局,我可以让一个人上班而不是另一个人(我可以轻松地翻转它们,但我似乎无法兼顾两者。

我感谢您对此提出的任何建议,并提前感谢。

1 个答案:

答案 0 :(得分:0)

我设法解决了自己的问题。

在我的路线中,我回到了:

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

在我的控制器中我必须执行以下操作:

[RequireHttps]
[RoutePrefix("Project")]
public class ProjectController : Controller
{

    [Route]
    [HttpGet]
    // Get: /Project
    public ActionResult Index()
    {

        // get list of projects and return list
        return View();
    }

    [Route("{id}")]
    [HttpGet]
    // Get: /Project/ID
    public ActionResult Index(Guid id)
    {


        // get project object from DB based on ID passed
        //return View(model);
        return View();
    }