我有下面的類:'多的行動中發現' 錯誤與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 }
);
我想不通爲什麼會出現一個問題 - 爲什麼它的一種方式而不是其他。