c# - 带有 int 和 string 的 ASP.net Web API 属性路由
问题描述
这应该是一个快速的。我有两条路线:
[HttpGet]
[Route("{id}")]
[ResponseType(typeof(Catalogue))]
public IHttpActionResult Get(string id) => Ok(_catalogueService.Get(id));
和
[HttpGet]
[Route("{numberOfResults:int}")]
[ResponseType(typeof(IEnumerable<Catalogue>))]
public IHttpActionResult List(bool active, int numberOfResults) => Ok(_catalogueService.List(active, numberOfResults));
当我使用邮递员尝试列出我的目录时,我传递了类似这样的内容
/目录/10
我希望它能够List
采用我的控制器中的方法。同样,如果我想获取目录,我会传递这样的内容:
/目录/AB100
我的路线工作正常,但我最近对方法进行了更改List
(我添加了活动布尔),现在我的路线无法正常工作。我上面给出的两个例子都Get
被错误的方法捕获了。
有没有办法解决这个问题?
解决方案
添加一个默认值active
并将其numberOfResults
作为可选参数放在参数之后。
[HttpGet]
[Route("{numberOfResults:int}")]
[ResponseType(typeof(IEnumerable<Catalogue>))]
public IHttpActionResult List(int numberOfResults, bool active = true) => //assuming active default
Ok(_catalogueService.List(active, numberOfResults));
由于额外的必需 active
参数,默认情况下它将不再匹配原始重载路由,因为active
即使不在路由模板中,它也会期望成为 URL 的一部分。
喜欢
/catalogues/10?active=true
通过使该参数成为可选参数,这意味着它现在可以像以前一样将预期的行为与active
从 URL 中省略时提供给操作的值相匹配
推荐阅读
- python - 如何添加到默认 Django 用户模型的 ManyToManyField 扩展?
- c# - 试图阻止随机生成的图片框不相互交叉
- javascript - 测试返回另一个类的类方法
- bash - 在cygwin提示符下换行?
- pandas - Getting keyerror:0 in pandas
- node.js - firebase 函数中未定义的记录器
- firebase - Cloud Firestore Blaze 计划是否存在未知的配额限制?Flutter Firestore 应用程序每天都从悬崖上掉下来
- ibm-doors - 如何识别对象字符串中的文本
- codeigniter - 节省用户在 CodeIgniter 中的登录时间
- javascript - 在 Javascript 中单击按钮时显示表格