出现这种情况的可能原因是参数命名不一致,或者路由模板不正确。为了解决这个问题,可以检查以下几个方面:
在 Action 方法中,参数名称需要与路由模板中的参数名称一致。例如,以下代码中的参数名称 'id” 必须与路由模板中的 '{id}” 一致。
[HttpGet("{id}")] public IActionResult Get(int id) { //... }
路由模板需要与请求 URL 中的路径部分一一对应。如果路由模板不正确,ASP.NET Core 就无法解析请求 URL,从而导致参数值为 null。例如,以下代码中的路由模板 'api/products” 不包含参数,因此无法解析请求 URL 中的参数。
[HttpGet("api/products")] public IActionResult GetProductById(int id) { //... }
应该将路由模板修改为'api/products/{id}”,以包含参数。
[HttpGet("api/products/{id}")] public IActionResult GetProductById(int id) { //... }
在模型绑定过程中,ASP.NET Core 会根据参数类型将请求中的字符串转换为相应的类型。例如,以下代码中的参数类型为 int,如果请求中的参数值无法转换为 int 类型,则会导致参数值为 null。
[HttpGet("{id}")] public IActionResult Get(int id) { //... }
可以使用 int? 类型,表示参数可以为 null,避免这种情况。
[HttpGet("{id}")] public IActionResult Get(int? id) { //... }
通过检查参数命名、路由模板和参数类型,可以解决 ASP.NET Core 路由接收到的值为 null 的问题。