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

时间:2019-04-03 13:34:42

标签: c# asp.net-core asp.net-core-routing

我正在尝试在我的一种控制器方法中允许空值。 看起来像这样:

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

当我尝试邮递员items/type/1/brand/null?pageSize=6&pageIndex=0时,我得到一个错误400

  

“值'null'无效”。

如何允许使用空值?

1 个答案:

答案 0 :(得分:1)

使路线模板参数为可选的{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