在 ASP.NET Core 3 MVC 网络应用程序中设置路由
Setting up routes in ASP.NET Core 3 MVC web app
我有一个 ASP.NET Core 3 MVC 网络应用程序,我有几个控制器。
我正在尝试建立链接以访问这些控制器,但我不确定自己做错了什么。
控制器名称: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 的控制器使用属性路由。
您可以将代码更改为这些
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 网络应用程序,我有几个控制器。
我正在尝试建立链接以访问这些控制器,但我不确定自己做错了什么。
控制器名称: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 的控制器使用属性路由。
您可以将代码更改为这些
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)