C# 路由到具有不同参数的相同url的不同操作
我正在使用以下路线构建api:C# 路由到具有不同参数的相同url的不同操作,c#,asp.net-core,asp.net-core-routing,C#,Asp.net Core,Asp.net Core Routing,我正在使用以下路线构建api: /items和/items/{id}。 现在,我想将此路由路由到两个不同的操作。我无法使用属性对其进行配置,以下是配置: routes.MapRoute( "route1", "/items", new { controller = "Items", action = "Get" }); routes.MapRoute( "route2", "/items/{id}", new { controller =
/items
和/items/{id}
。
现在,我想将此路由路由到两个不同的操作。我无法使用属性对其进行配置,以下是配置:
routes.MapRoute(
"route1",
"/items",
new { controller = "Items", action = "Get" });
routes.MapRoute(
"route2",
"/items/{id}",
new { controller = "Items", action = "Get" });
但这条路线根本不起作用。我错在哪里?不可能有两个同名的操作方法,并使用路由模板将它们映射,除非这些方法映射到不同的HTTP方法(所有这些都是由于模型绑定的工作方式): 但是,使用属性路由是可以做到这一点的。如果无法使用此方法,则只有以下选项:
- 重命名某个操作的名称李>
- 使用可选的
参数将两个操作合并为一个id
routes.MapRoute(
name: "route",
template: "{controller=Items}/{action=Get}/{id?}");
将第二个操作更改为调用
GetByID
,并在路由中将其重命名为match。感谢您的建议。这是最简单的解决方案。你知道其他的方法吗?为什么你不能用属性来配置它?FWIW,你所拥有的应该可以很好地工作,除了两个路由都被用于相同的操作,这是你明确说你不想要的。实际问题是什么?@IvanRubanau展示了一个你试图映射到的两个不同动作的例子
public class ItemsController : Controller
{
public IActionResult Get(int? id)
{
if (id.HasValue())
{ // logic as in second action }
else
{ // first action logic }
}
}
routes.MapRoute(
name: "route",
template: "{controller=Items}/{action=Get}/{id?}");