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

MVC routing Issues with GUID as ID type

我的路线有一个小问题,我不是 100% 确定如何解决。

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

项目负责人:

[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();
    }

我似乎陷入了一个小僵局,我可以让一个工作,但不能让另一个工作(我可以轻松翻转它们,但我似乎无法让两个都工作。

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

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

在我的路线中我回到了:

            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();
    }