c# - 在 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?}");
});
所以我的理解是我可以通过这些 url 浏览到这 2 个操作:
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 的控制器使用属性路由。
推荐阅读
- jquery - 如何在查找字段中设置值
- android - 默认情况下,LinearLayout 内的 ImageView 在侧面有边距
- android - 在 EditText 字段中键入时,“完成”按钮不再可见
- internet-explorer - 由于参数中的分号,来自 Microsoft Edge 和 IE 的 S3 PUT 请求失败
- android - 未在 Android 8 和 9 上授予可选的危险权限 READ_PHONE_STATE?
- java - 用于 RelativeLayout 的 Android 多点触控 lisiner
- python - 如何在机器学习中对数值和分类特征使用统一管道?
- ios - 处理完 HTTP 请求后重新加载 UITableView
- json - 使用 MongoDB 错误 com.mongodb.util.JSONParseException(uPDATED) 在 SpringBoot 中自定义 @Query
- google-chrome-extension - 如何“制作一个简单的密码自动填充 Chrome 扩展程序”?