【发布时间】:2022-01-08 12:17:55
【问题描述】:
我的 Java/Spring 背景很重,并试图将一些知识转移到 ASP.NET Core 6。
在 Spring 中,在 RestController 上,我能够根据查询参数的存在来路由请求。
因此,带有 uri:/students?firstName=Kevin 的 HttpRequest 可以路由到与带有 uri:/students 的 HttpRequest 不同的控制器方法。
在 ASP.NET Core 6 中,在完成一些示例并阅读 Web API 文档后,我无法确定是否可以实现等效。
这是我想要实现的,这是否可以使用两种方法和路由配置来识别根据查询参数调用哪个控制器方法?
[ApiController]
[Route("Students")]
public class StudentHomeProfileController : ControllerBase
{
[HttpGet] //Route here when no parameters provided
public async Task<ActionResult<IEnumerable<Student>>> GetStudentAsync()
{
/* Code omitted */
}
[HttpGet] //Route here when firstName query param provided
public async Task<ActionResult<IEnumerable<Student>>> SearchStudentAsync([FromQuery] string firstName)
{
/* Code omitted */
}
}
【问题讨论】:
-
你可以做这样的事情 [HttpGet("SearchStudentAsync")] 它将路由到学生/searchstudentasync。就个人而言,我已经搜索了一种在 Http 方法属性中没有路由参数的方法,但我从未找到。
-
谢谢@AchoVasilev。我想我可以调整路线,但我尽量保持 RESTFUL。我有一个将
[HttpGet("search")]添加到第二种方法的原型。我相信我需要使用该方法处理每个搜索查询参数的存在或缺失。 -
试试看这个 -> stackoverflow.com/Questions/9499794/…。也许它会有所帮助。
-
为什么不试试子控制器路由方法呢?子控制器允许您创建类似 order\1\orderdetail\2 的路线。不要使用查询参数进行路由。使用控制器和子控制器。基于参数传递的动态路由会在ui中混淆
-
@GoldenLion 我不是想通过 ID 来定位特定的学生。我正在尝试搜索具有特定属性值的学生。例如,所有名字为 Kevin 或可能在某个年级内的学生。
标签: c# routes asp.net-core-webapi asp.net-core-6.0