簡體   English   中英

區域下的Asp.Net MVC 5自定義動作路由

[英]Asp.Net MVC 5 custom action routing under an area

我目前正在嘗試生成此網址“/Cloud/Hosting/RoaringPenguin/Manage/Exclusions”。

這是區域注冊

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

但這似乎也不起作用。 如果我離開所有屬性,那么我得到的最終 url 是“/Cloud/Hosting/RoaringPenguin/Exclusions”。 有誰知道我如何在網址中獲得“管理”?

只是為了確認我在 RouteConfig 類下的 RegisterRoutes 方法中設置了以下內容

routes.MapMvcAttributeRoutes();

任何幫助表示贊賞。 謝謝

您的默認區域路線最后不允許“管理/排除”部分。 如果您僅將 URL /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()

就像你一樣。

嘗試使用此代碼

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM