我们正在使用 .NET Core 构建 Web API。我们需要支持“GetBy”功能,例如GetByName、GetByType 等,但我们遇到的问题是如何以 Restful 方式通过路由来描述这一点,以及方法重载不能正确地按照我们认为的路由方式工作。我们使用 MongoDB,因此我们的 ID 是字符串。
我假设我们的路线应该是这样的:
/api/templates?id=1
/api/templates?name=ScienceProject
/api/templates?type=Project
问题是我们 Controller 中的所有方法都有一个字符串参数并且没有正确映射。我的路线应该不同吗?或者有没有办法将这些路线正确映射到正确的方法?
最佳答案
如果参数是互斥的,即您仅按名称或类型搜索,而不按名称和类型搜索,则可以让参数成为路径的一部分,而不是查询参数。
示例
[Route("templates")]
public class TemplatesController : Controller
{
[HttpGet("byname/{name}")]
public IActionResult GetByName(string name)
{
return Ok("ByName");
}
[HttpGet("bytype/{type}")]
public IActionResult GetByType(string type)
{
return Ok("ByType");
}
}
此示例将导致如下路由:
/api/templates/byname/ScienceProject
/api/templates/bytype/Project
如果参数不是互斥的,那么您应该按照 answer by Fabian H. 中的建议进行操作
关于c# - "GetBy"Web API中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46690715/