微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在ASP.NET Core 3 MVC Web应用程序中设置路由 混合路由

如何解决在ASP.NET Core 3 MVC Web应用程序中设置路由 混合路由

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

我正在尝试建立链接以访问这些控制器,但不确定自己在做什么错。

控制器名称ExhibitorsDemoQueue

每个控制器都有一个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?}");
});

据我了解,我可以通过以下网址浏览这两个操作:

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?}");
});

enter image description here

enter image description here


混合路由

您可以混合使用常规路由和属性路由,但是对于向浏览器返回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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。