Asp.net mvc 将请求参数名称映射到具有不同名称的操作参数

Asp.net mvc 将请求参数名称映射到具有不同名称的操作参数,asp.net-mvc,Asp.net Mvc,我有行动方法: public ActionResult GetBook(int id){ ... } 由于参数名称错误,它不会接受此请求: 我相信可以通过配置模型绑定器来实现 我希望请求参数由“id”和“bookId”名称绑定换句话说,此请求正在被传递: /controllerName/GetBook?bookId=3 同 /controllerName/GetBook?Id=3 我建议不要在项目中采用这种设计,但既然你只想知道它是否可行,我想你可以用下面的方法来做 在RouteConf

我有行动方法:

public ActionResult GetBook(int id){
...
}
由于参数名称错误,它不会接受此请求:

我相信可以通过配置模型绑定器来实现

我希望请求参数由
“id”
“bookId”
名称绑定
换句话说,此请求正在被传递:

/controllerName/GetBook?bookId=3

/controllerName/GetBook?Id=3

我建议不要在项目中采用这种设计,但既然你只想知道它是否可行,我想你可以用下面的方法来做

在RouteConfig.cs中注册路由,如下所示

routes.MapRoute(
 "GetBook",
 "ControllerName/GetBook/{id}/{bookId}",
 new { controller = "ControllerName", action = "GetBook", id = UrlParameter.Optional, bookId = UrlParameter.Optional }
);
public ActionResult GetBook(int id = 0, int bookId = 0) {
    ...
}
然后在控制器中创建一个动作方法,如下所示

routes.MapRoute(
 "GetBook",
 "ControllerName/GetBook/{id}/{bookId}",
 new { controller = "ControllerName", action = "GetBook", id = UrlParameter.Optional, bookId = UrlParameter.Optional }
);
public ActionResult GetBook(int id = 0, int bookId = 0) {
    ...
}

您的意思是,当您使用
/controllerName/GetBook?bookId=3
/controllerName/GetBook?id=3
时,您的代码应该采用相同的方法。您能否解释一下为什么您希望使用自定义模型绑定器,而不仅仅是将前端更改为传递
id
,或者将控制器操作更改为执行
int图书编号
?看起来不必要的复杂。@PriyankPanchal是的,没错。@GregH实际上没有问题,我只是想知道怎么做,可能吗?