在 ASP.NET Core 3 MVC Web 应用程序中设置路由
Posted
技术标签:
【中文标题】在 ASP.NET Core 3 MVC Web 应用程序中设置路由【英文标题】:Setting up routes in ASP.NET Core 3 MVC web app 【发布时间】:2021-02-02 15:03:31 【问题描述】:我有一个 ASP.NET Core 3 MVC Web 应用程序和几个控制器。
我正在尝试形成我的链接以访问这些控制器,但我不确定我做错了什么。
控制器名称:Exhibitors
、DemoQueue
每个控制器都有一个 Index
动作,它接受 2 个 int
类型参数
public IActionResult Index(int eventId, int companyId)
这是我的相关@987654327@ 代码
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
【问题讨论】:
您可以随时使用控制器/动作上的属性来自定义路由引擎,您不需要遵循 default 路由。 docs.microsoft.com/en-us/aspnet/core/fundamentals/… 我读到属性路由应该留给rest apis? 这就是你正在做的。 “Rest APIs”和“Websites”之间的唯一区别是网站大多使用 GET 动词并返回 html 而不是 json/xml。引擎盖下也是一样的。 【参考方案1】:您没有定义自定义路由模板。在您的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 的控制器使用属性路由。
参考:https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/routing?view=aspnetcore-3.1#mixed-routing-attribute-routing-vs-conventional-routing
【讨论】:
完美。这帮助我弄清楚了如何设置一个端点是 /Report/001【参考方案2】:您可以将代码更改为这些
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)
【讨论】:
以上是关于在 ASP.NET Core 3 MVC Web 应用程序中设置路由的主要内容,如果未能解决你的问题,请参考以下文章
asp.net core 3.0 MVC JSON 全局配置
asp.net core 3.1 MVC/WebApi JSON 全局配置
除日期时间外,每个字段都可以编辑。始终重置为默认值 - MVC ASP.NET Core 3.1 Web 应用
ASP.NET Core Web 应用程序系列- 在ASP.NET Core中使用Autofac替换自带DI进行批量依赖注入(MVC当中应用)