Asp.Net Web Api:处理两个具有相同签名的获取请求

时间:2019-02-27 12:49:24

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

当前情况

    [HttpGet]
    public HttpResponseMessage CheckProfileStatus(int id)
    {
        //check profile status from third party
        return //profile status and HttpStatus;
    }

    [HttpGet]
    public HttpResponseMessage ProcessTheProfile(int profileId)
    {
        //check profile status from third party again, if status is "Good", do something
        return //someMessage and HttpStatus;
    }

调用CheckProfileStatus方法的网址

myUrl/api/Profile/123

调用ProcessTheProfile方法的网址

myUrl/api/Profile/?profileId=123

我希望代码中的注释可以使情况变得清楚。

我真的不喜欢在一个控制器中有两个具有相同签名的HttpGet方法(即使它可以工作)。

我不知道这是否是最佳实践。

问题:

我应该在两个单独的控制器中提取这两个方法,在一个控制器中具有两个具有相同签名的HttpGet方法是否完全可以,还是有更好的方法来处理这种情况?

2 个答案:

答案 0 :(得分:1)

首先,这会使API的任何客户端感到困惑。

您有2个GET方法,它们实际上是相同的。实际上,大多数人都喜欢添加一条覆盖您的第一个选项的路由,该路由基本上将profileId设置为正斜杠后的值。

第二,期望是当您对具有ID的实体发出GET时,会得到该实体的表示形式。这不是这里发生的事情。

您需要确定所需的API。通用的,这样的东西就可以了:

myUrl/api/profile/process/123process/profile或其他对API有意义的内容。

如果您的API应该是 RESTful (这基本上意味着每个HTTP动词只有一个方法,仅此而已),那么您需要为 ProcessProfile ,然后您的网址应如下所示:

myUrl/api/ProcessProfile/123

这些选项都不是一成不变的,只是这些选项。 对OP线程的注释也提供了一些不错的选择,应予以考虑。

答案 1 :(得分:0)

我认为,如果您的项目变得越来越大,因为使用起来很混乱,那么这种方法就会引起问题。

我建议您使用RESTful方法。

也许这篇文章会帮助您有所了解。

https://medium.com/@schneidenbach/restful-api-best-practices-and-common-pitfalls-7a83ba3763b5