2016-10-12 62 views
1

我目前正在嘗試生成此網址「/ Cloud/Hosting/RoaringPenguin/Manage/Exclusions」。Asp.Net MVC 5區域下的自定義動作路由

這裏是區域註冊

public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "Hosting_default", 
      "Cloud/Hosting/{controller}/{action}/{id}", 
      new { action = "Index", id = UrlParameter.Optional } 
     ); 
    } 

這裏在控制器

public class RoaringPenguinController : PortalControllerBase 
{ 


    public ActionResult Exclusions() 
    { 
     return View("Exclusions"); 
    } 


} 

我已經嘗試增加了一個路由到所述動作本身像這樣

[Route("Manage/Exclusions")] 
public ActionResult Exclusions() 

我也已經嘗試爲控制器本身添加一些屬性

[RouteArea("Hosting")] 
[RoutePrefix("RoaringPenguin")] 
public class RoaringPenguinController : PortalControllerBase 

但這似乎並不奏效。如果我關閉所有的屬性,那麼我得到的最終網址是「/ Cloud/Hosting/RoaringPenguin/Exclusions」。 有誰知道我怎麼能得到的「管理」的網址以及?

只是爲了確認我在我的RegisterRoutes方法下面一組的RouteConfig類

routes.MapMvcAttributeRoutes(); 

任何幫助表示讚賞之下。謝謝

回答

1

您的默認區域路線不允許「管理/排除」部分結束。如果你的網址只是/Cloud/Hosting/RoaringPenguin/Exclusions(減去路徑的Manage部分),它就可以正常工作。

如果您需要的路線完全相同,那麼屬性路由是您最好的選擇。然而,你提到的那些嘗試都缺少某種或那種。你的控制器應與RouteAreaRoutePrefix裝飾組成路徑的第一部分:

[RouteArea("Hosting", AreaPrefix = "Cloud/Hosting")] 
[RoutePrefix("RoaringPenguin")] 
public class RoaringPenguinController : Controller 

然而,這是典型的以地區打交道時實際執行基本控制,這樣就可以在短短的一個指定RouteArea地點:

[RouteArea("Hosting", AreaPrefix = "Cloud/Hosting")] 
public class HostingBaseController : Controller 

[RoutePrefix("RoaringPenguin")] 
public class RoaringPenguinController : HostingBaseController 

然後,在你的行動:

[Route("Manage/Exclusions")] 
public ActionResult Exclusions() 

正如你了。

+0

嗨克里斯, 我嘗試了第一個建議(沒有基礎控制器),但我得到的是404錯誤 '/'應用程序中的服務器錯誤。 無法找到該資源。 描述:HTTP 404.您正在查找的資源(或其某個依賴項)可能已被刪除,名稱已更改或暫時不可用。請檢查以下網址並確保它拼寫正確。 請求的網址:/ Cloud/Hosting/RoaringPenguin/Manage/Exclusions 版本信息:Microsoft .NET Framework版本:4.0.30319; ASP.NET版本:4.6.1069.1' – tjackadams

+1

還有其他事情正在發生。要麼區域沒有正確註冊,屬性路由選擇沒有正確啓用,或者其他路由與此衝突。根據你發佈的內容,這應該起作用。如果有什麼不對,就像你的區域實際上不是'Hosting',而是'CloudHosting',那麼你應該對代碼進行必要的更正。 –

+0

你是對的。 基本上我的屬性路由在我的區域註冊後被調用。 這是解決方案 // //路由 routes.MapMvcAttributeRoutes(); //區域註冊 AreaRegistration.RegisterAllAreas(); ' 我改變了你的初始解決方案後,工作。非常感謝! – tjackadams

0

與此代碼嘗試

[RouteArea("AreaName", AreaPrefix = "Cloud/Hosting")] 
[RoutePrefix("RoaringPenguin")] 
public class SampleController : Controller 
{ 
    [Route("Manage/Exclusions")] 
    public ActionResult Exclusions() 
    { 
     return View("Exclusions"); 
    } 
} 

[RoutePrefix("Cloud/Hosting/RoaringPenguin")] 
public class RoaringPenguinController : PortalControllerBase 
{ 

    [Route("Manage/Exclusions")] 
    public ActionResult Exclusions() 
    { 
     return View("Exclusions"); 
    } 

} 

這將是第一線

routes.MapMvcAttributeRoutes(); 

,只有當你需要編寫此行

AreaRegistration.RegistrationAllAreas();