如何让可选的路由参数允许为空?

3

我试图在我的一个控制器方法中允许空值。代码如下:

[Route("items/type/{catalogTypeId}/brand/{catalogBrandId}")]
public async Task<IActionResult> Items(int? catalogTypeId, int? catalogBrandId, [FromQuery] int pageSize = 6, [FromQuery] int pageIndex = 0)

当我尝试使用Postman发送 items/type/1/brand/null?pageSize=6&pageIndex=0 时,它会给出400错误。

"值 'null' 无效".

如何允许空值?


使参数可选 {catalogBrandId?} - Nkosi
1个回答

4
使路由模板参数可选 {catalogBrandId?}
[Route("items/type/{catalogTypeId}/brand/{catalogBrandId?}")]
public async Task<IActionResult> Items(int? catalogTypeId, int? catalogBrandId = null, [FromQuery] int pageSize = 6, [FromQuery] int pageIndex = 0)

并将其从URL中排除

items/type/1/brand?pageSize=6&pageIndex=0

您实际上应该使用多个路由来获得更干净的URL。

[Route("items")]
[Route("items/type/{catalogTypeId}")]
[Route("items/type/{catalogTypeId}/brand/{catalogBrandId}")]
public async Task<IActionResult> Items(int? catalogTypeId = null, int? catalogBrandId = null, [FromQuery] int pageSize = 6, [FromQuery] int pageIndex = 0)

请注意,模板不再是可选项,但操作中的参数是可选的。
这将允许...
items?pageSize=6&pageIndex=0
items/type/1?pageSize=6&pageIndex=0
items/type/1/brand/2?pageSize=6&pageIndex=0

谢谢您的回复。我会尝试解决这个问题。请注意,虽然 TypeId 和 BrandId 一样都是可选的,但我认为我已经明白了您的意思。 - PardonMyCheckmate
@PardonMyCheckmate 然后添加一个额外的路由 [Route("items")],以及 int? catalogTypeId = null。你似乎已经明白了。 - Nkosi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接