![](/img/trans.png)
[英]ASP.NET Core 3.1 Web API - Create route with nullable parameter
[英]ASP.NET Core Web API : route by query parameter
我來自沉重的 Java/Spring 背景,並試圖將一些知識轉移到 ASP.NET Core 6。
在 Spring 中,在RestController
上,我能夠根據查詢參數的存在來路由請求。
因此,與帶有 uri: /students 的HttpRequest
相比,帶有 uri: /students
/students?firstName=Kevin
的HttpRequest
可以路由到不同的 controller 方法。
在 ASP.NET Core 6 中,在完成一些示例並閱讀 Web API 的文檔后,我無法確定是否可以進行等效操作。
這是我要實現的目標,這是否可以使用兩種方法和路由配置來識別根據查詢參數調用哪個 controller 方法?
[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 */
}
}
您正在嘗試使用query params
來區分 API 調用。 這不是這樣做的方法。 如果你想分開調用,你可能應該使用path params
。
閱讀有關ASP.NET 核心中的路由的更多信息 - https://docs.microsoft.com/en-us/aspnet/core/fundamentals/routing?view=aspnetcore-6.0
我想你正在尋找這樣的東西,你需要在“ HttpGet ”屬性中指定參數
[Route("api/[controller]")]
[ApiController]
public class Test2Controller : ControllerBase
{
[HttpGet] // GET /api/test2
public IActionResult ListProducts()
{
return ControllerContext.MyDisplayRouteInfo();
}
[HttpGet("{id}")] // GET /api/test2/xyz
public IActionResult GetProduct(string id)
{
return ControllerContext.MyDisplayRouteInfo(id);
}
[HttpGet("int/{id:int}")] // GET /api/test2/int/3
public IActionResult GetIntProduct(int id)
{
return ControllerContext.MyDisplayRouteInfo(id);
}
[HttpGet("int2/{id}")] // GET /api/test2/int2/3
public IActionResult GetInt2Product(int id)
{
return ControllerContext.MyDisplayRouteInfo(id);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.