簡體   English   中英

ASP.NET Core Web API:通過查詢參數路由

[英]ASP.NET Core Web API : route by query parameter

我來自沉重的 Java/Spring 背景,並試圖將一些知識轉移到 ASP.NET Core 6。

在 Spring 中,在RestController上,我能夠根據查詢參數的存在來路由請求。

因此,與帶有 uri: /students 的HttpRequest相比,帶有 uri: /students /students?firstName=KevinHttpRequest可以路由到不同的 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 ”屬性中指定參數

https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/routing?view=aspnetcore-6.0#attribute-routing-with-http-verb-attributes

[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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM