簡體   English   中英

路由中的 ASP.Net 核心“id”position

[英]ASP.Net Core “id” position in route

我有一種非常具體的方式需要處理到區域和控制器的路由。 我設置它的方式是:

有一個“Dash”和“Servers”區域,都有“Home”和“Index”路由。 Dash 是一條普通路線,映射為:

routes.MapRoute(
  name: "Dash",
  template: "{area}/{controller=Home}/{action=Index}/{id?}"
);

它適用於 url /Dash/Home/Index

問題出在“服務器”路由上,我想在區域名稱后面加上那個“id”參數,結果是: /Servers/1234/Home/Index並且仍然可以使用@Url.Action("Index", "Home", new { area = "Servers", id = 1234 })生成鏈接@Url.Action("Index", "Home", new { area = "Servers", id = 1234 })我嘗試將其映射為:

routes.MapRoute(
  name: "Server",
  template: "{area}/{id}/{controller=Home}/{action=Index}"
);

但這似乎不起作用。 該頁面無法加載到 url /Servers/1234和 Url.Action 嘗試制作/Servers/Home/Index/1234這不是我需要的...

我還嘗試將“id”保持在原來的位置,並將另一個參數添加為“serverID”,使其看起來像template: "{area}/{serverID}/{controller=Home}/{action=Index}/{id?}"並將 Url.Action 中的 id 設置為 serverID,這也不起作用。 它試圖建立鏈接/Servers/?serverID=1234

我不太了解路由以及如何使其工作,因此任何解釋它的幫助將不勝感激。 是否可以將“id”放在區域名稱之后,我將如何在控制器中讀取它? 是否還有一個我可以在 CRUD 中使用的普通 ID,以便像/Servers/1234/Info/Edit/4這樣的 url 仍然有效,並且我可以知道兩個值 serverID:1234 和 id:4?

由於您使用的是網絡核心,因此您最好使用如下屬性路由映射:

 
app.UseEndpoints(endpoints =>
    {
         endpoints.MapAreaControllerRoute(
            name: "Server",
            areaName: "Servers",
            pattern: "Servers/{id}/{controller=Home}/{action=Index}";

        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
    });
);

或者可以使用常規路由:

 endpoints.MapControllerRoute(
  name: "MyAreas",
  pattern: "{area:exists}/{id}/{controller=Home}/{action=Index}";

你將不得不 map 你的控制器:

[Area("MyArea")]
public class MyController : Controller

暫無
暫無

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

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