EF Core Web API按FirstName查询时参数为null问题排查
问题原因与解决方法
问题根源
你的第二个Get方法存在参数绑定不明确的问题:
- 方法标记了
[HttpGet("FirstName")],但路由模板里没有包含name参数的占位符; - 同时也没有给
name参数指定绑定来源(比如查询字符串、路由),ASP.NET Core无法自动识别参数值的来源,导致name始终为null。
解决方法
方法1:将参数嵌入路由路径
修改路由特性,把name作为路由的一部分,请求时直接在URL路径中传递参数:
[HttpGet("FirstName/{name}")] public IList<User> Get(string name) { var urunler = from Users in myDbContext.Users where Users.FirstName == name select Users; return urunler.ToList(); }
调用示例:GET /api/[你的控制器名称]/FirstName/张三
方法2:从查询字符串绑定参数
如果希望通过?name=xxx的查询字符串形式传递参数,给name参数添加[FromQuery]特性明确绑定来源:
[HttpGet("FirstName")] public IList<User> Get([FromQuery] string name) { var urunler = from Users in myDbContext.Users where Users.FirstName == name select Users; return urunler.ToList(); }
调用示例:GET /api/[你的控制器名称]/FirstName?name=张三
额外注意事项
两个Get方法的路由存在歧义风险:当调用无参数的GET请求时,ASP.NET Core可能无法区分哪个方法应该响应。建议给第一个获取全部用户的方法指定明确路由,比如:
[HttpGet("All")] public IList<User> GetAll() { return myDbContext.Users.ToList(); }
内容的提问来源于stack exchange,提问作者Oğulcan Ocaklı
相关产品推荐
相关产品推荐

