c# - "GetBy"Web API中的方法

标签 c# rest asp.net-web-api asp.net-core

我们正在使用 .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/

相关文章:

c# - 将多个属性插入 XML 元素。联机SQL

c# - Bot 框架可以处理 Facebook 音频消息吗

c# - System.Data.SqlClient.SqlTransaction.Dispose 中发生了什么?

c# - 处理与外部登录提供商的 claim

c# - 如何格式化我的 REST Web 服务的 XML 响应?

javascript - Adonis api 邮件无法正常工作(adonis install @adonisjs/mail)

.net - 使用 UriTemplate 在 WCF 中组合 SOAP/JSON/XML

asp.net-web-api - 如何从远程计算机查看由 VS Code 提供服务的 .net core 2 站点?

c# - 如何使用 aspnet ApiVersioning 在 Swashbuckle 中配置 MultipleApiVersions

javascript - 如何使用 AngularJS 在浏览器 cookie 中存储身份验证承载 token