ASP.net Web API 使用 int 和 string 的属性路由
ASP.net Web API attribute routing with int and string
这应该很快。
我有两条路线:
[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));
当我使用邮递员尝试列出我的目录时,我传递了类似这样的东西
/catalogues/10
我希望它在我的控制器中使用 List
方法。同样,如果我想获取一个目录,我传递这样的东西:
/catalogues/AB100
我的路线工作正常,但我最近对 List
方法进行了更改(我添加了 active bool),现在我的路线无法正常工作。
我上面给出的两个例子都被错误的 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));
由于额外的 required active
参数,默认情况下它将不再匹配原始的重载路由,因为它期望 active
URL 的一部分,即使不在路线模板中也是如此。
喜欢
/catalogues/10?active=true
通过将该参数设为可选,这意味着它现在可以像以前一样将预期行为与从 URL
中省略时提供给操作的 active
值相匹配
这应该很快。 我有两条路线:
[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));
当我使用邮递员尝试列出我的目录时,我传递了类似这样的东西
/catalogues/10
我希望它在我的控制器中使用 List
方法。同样,如果我想获取一个目录,我传递这样的东西:
/catalogues/AB100
我的路线工作正常,但我最近对 List
方法进行了更改(我添加了 active bool),现在我的路线无法正常工作。
我上面给出的两个例子都被错误的 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));
由于额外的 required active
参数,默认情况下它将不再匹配原始的重载路由,因为它期望 active
URL 的一部分,即使不在路线模板中也是如此。
喜欢
/catalogues/10?active=true
通过将该参数设为可选,这意味着它现在可以像以前一样将预期行为与从 URL
中省略时提供给操作的active
值相匹配