簡體   English   中英

在 ASP.NET Core 3 MVC Web 應用程序中設置路由

[英]Setting up routes in ASP.NET Core 3 MVC web app

我有一個 ASP.NET Core 3 MVC Web 應用程序,並且有幾個控制器。

我正在嘗試形成訪問這些控制器的鏈接,但我不確定我做錯了什么。

控制器名稱: Exhibitors , DemoQueue

每個控制器都有一個Index動作,它接受 2 個int類型參數

public IActionResult Index(int eventId, int companyId)

這是我的相關Startup.cs代碼

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllers();
    endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}");
});

所以我的理解是,我可以通過這些 url 瀏覽到這兩個操作:

Exhibitors/1/2
DemoQueue/3/4

但似乎我必須使用這個冗長的值:

Exhibitors/Index?eventId=1&companyId=2

有沒有辦法設置一條路線,使我能夠轉到[controller]/id/id 但是轉到不同的控制器,例如ExhibitorsDemoQueue

您沒有定義自定義路由模板。 在您的startup.cs ,您擁有的只是默認路由模板。

要將Exhibitors/1/2DemoQueue/3/4等請求映射到其對應的控制器Index方法,您需要在默認的常規路由模板之前添加以下內容:


app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "exhibitors-custom",
        pattern: "exhibitors/{eventId:int}/{companyId:int}",
        defaults: new { controller = "exhibitors", action = "index" }
    );

    endpoints.MapControllerRoute(
        name: "demoqueue-custom",
        pattern: "demoqueue/{eventId:int}/{companyId:int}",
        defaults: new { controller = "demoqueue", action = "index" }
    );

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

在此處輸入圖片說明

在此處輸入圖片說明


混合路由

您可以混合使用傳統路由和屬性路由,但通常將傳統路由用於為瀏覽器返回 HTML 的控制器,並為控制器提供 RESTful API 的屬性路由。

參考: https : //docs.microsoft.com/en-us/aspnet/core/mvc/controllers/routing?view=aspnetcore-3.1#mixed-routing-attribute-routing-vs-conventional-routing

您可以將代碼更改為這些

public class ExhibitorsController:Controller
[Route("~/Exhibitors/{eventId}/{companyId}")]
public IActionResult Index (int eventId, int companyId)

and

public class DemoQueueController:Controller
[Route("~/DemoQueue/{eventId}/{companyId}")]
public IActionResult Index (int eventId, int companyId)

暫無
暫無

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

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