RESTFul API 同时使用 FromRouteAttribute 和 FromQuery 的 Get 方法

RESTFul API Get method with both FromRouteAttribute and FromQuery

我有一个现有的 RESTFul API 已经实现了以下端点。

[Route("api/[controller]")]
[ApiController]
public class ItemsController : ControllerBase
{
    [HttpGet]
    public Items Get()
    {
         return new Items();
    }

    [HttpGet("{id}")]
    public Item Get(Guid id)
    {
        var item = new Item(id);
        return item;
    }
}

以上端点适用于以下 Url、

获取/项目

GET /Items/{id}

现在我想添加一个适用于以下 URL、

的新端点

GET /Items?name={name}

我尝试了几种方法,但我无法完成这项工作,请你帮我解决这个问题。

谢谢大家

你可以这样做:

public class MyClass
{
    public int Id { get; set; }
    public string Name { get; set; }
}


[ApiController]
[Route("[controller]")]
public class NamesController : ControllerBase
{
    private readonly List<MyClass> myClasses;

    public NamesController()
    {
        myClasses = new List<MyClass>
        {
            new MyClass{Id=1,Name="Sara"},
            new MyClass{Id=2,Name="Nina"},
            new MyClass{Id=3,Name="John"},
        };
    }
 
    
    // https://localhost/names
    // https://localhost/names?name="Sara"
    [HttpGet]
    public IActionResult GetAll(string name)
    {

        if (!string.IsNullOrWhiteSpace(name))
            return Ok(myClasses.FirstOrDefault(x => x.Name == name));
        else
            return Ok(myClasses);
    }


    // https://localhost/names/1
    [HttpGet("{id}")]
    public IActionResult GetById(int id)
    {

        var item = myClasses.FirstOrDefault(x => x.Id == id);
        return Ok(item);
    }
}