如何解决在ASP.NET Core 3 MVC Web应用程序中设置路由 混合路由
我有一个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?}");
});
据我了解,我可以通过以下网址浏览这两个操作:
Exhibitors/1/2
DemoQueue/3/4
但是似乎我必须使用这个大范围的值:
Exhibitors/Index?eventId=1&companyId=2
是否可以设置一条路线使我能够去[controller]/id/id
?但是请转到其他控制器Exhibitors
或DemoQueue
解决方法
您尚未定义自定义路由模板。在您的startup.cs
中,您所拥有的只是默认的路由模板。
要将Exhibitors/1/2
和DemoQueue/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的控制器,属性路由通常使用常规路由。
,您可以将代码更改为这些
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 举报,一经查实,本站将立刻删除。