我有下面的类:'多的行动中发现' 错误与REST的Web API路由
public class GetLogsRequestDto
{
public LogLevel Level { get; set; }
public LogSortOrder SortOrder { get; set; }
}
我有以下2个动作的Web API控制器(LogsController):
async Task<IHttpActionResult> Get([FromUri]int id)
async Task<IHttpActionResult> Get([FromUri]GetLogsRequestDto dto)
第一个用于检索特定日志,第二个用于检索日志列表。当我通过/ logs/123对特定日志进行GET请求时,它会正确调用第一个操作,同样,如果我为/ logs发出GET请求,它会正确调用第二个操作(该类中定义的属性是可选的并且不需要总是提供)。
不过,我想改变第一个GET方法,因此使用类,而不是INT id参数,像这样(注意它指定一个不同的(单)型以上的第二招):
async Task<IHttpActionResult> Get([FromUri]GetLogRequestDto dto)
这GetLogRequestDto
类看起来是这样的:
public class GetLogRequestDto
{
[Required]
[Range(100, int.MaxValue)]
public int Id { get; set; }
}
我的这种做法背后的原因,是因为这样我可以有模型的验证通过我的标准ModelStateValidationActionFilter
,并且也把这个类中,R内的任何特定的验证属性而不是使用'int id'参数方法时,则必须执行验证。
当我虽然实行这一做法,尝试调用/日志/ 1,我得到以下错误:
Multiple actions were found that match the request
它不是用作这2种方法PARAMS的2种不同类型之间的区别。
我已经配置缺省路由是:
config.Routes.MapHttpRoute(
name: "controller-id",
routeTemplate: "{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
我想不通为什么会出现一个问题 - 为什么它的一种方式而不是其他。