首页 > 解决方案 > 在 ASP.NET Core 3 MVC Web 应用程序中设置路由

问题描述

我有一个 ASP.NET Core 3 MVC Web 应用程序和几个控制器。

我正在尝试形成我的链接来访问这些控制器,但我不确定我做错了什么。

控制器名称:Exhibitors,DemoQueue

每个控制器都有一个带有Index2 个int类型参数的动作

public IActionResult Index(int eventId, int companyId)

这是我的相关Startup.cs代码

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

所以我的理解是我可以通过这些 url 浏览到这 2 个操作:

Exhibitors/1/2
DemoQueue/3/4

但似乎我必须使用这个冗长的值:

Exhibitors/Index?eventId=1&companyId=2

有没有办法设置路线让我去[controller]/id/id?但是转到不同的控制器,例如ExhibitorsDemoQueue

标签: c#asp.net-core.net-coreasp.net-core-mvcasp.net-core-routing

解决方案


您没有定义自定义路由模板。在您的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


推荐阅读