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);
}
}
我有一个现有的 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);
}
}