2016-12-08 28 views
0

我對我的路線有輕微的問題,我不是100%確定如何解決。MVC路由作爲ID類型的GUID的問題

我有一個名爲項目,我控制我想說明以下網址設置 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"} 
      ); 

這讓我獲得/項目/列出所有的項目

我開始做一些研究,我發現我可以做一些工作,通過這樣的路線。

  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

什麼是你的第一個方法,它使用屬性路由的'項目問題'行動方法?您不需要添加「AllProjects」路由定義,因爲屬性路由將照顧您的請求url要求。 – Shyju

回答

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