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();
}
我的路线有一个小问题,我不是 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();
}