【问题标题】:MVC routing Issues with GUID as ID type使用 GUID 作为 ID 类型的 MVC 路由问题
【发布时间】:2016-12-08 17:21:06
【问题描述】:

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

我有一个名为 Project 的控制器,我正在尝试进行以下 url 设置 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();
    }

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

感谢您对此提出的任何建议,并在此先感谢您。

【问题讨论】:

  • 第一种使用属性路由的Project 操作方法有什么问题?您不需要添加 AllProjects 路由定义,因为属性路由会处理您的请求 url 要求。

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


【解决方案1】:

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

在我返回的路线中:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-16
    • 2016-11-09
    • 2023-03-18
    • 2011-07-31
    相关资源
    最近更新 更多