检查API是否有效,应该使用Get还是Post方法?

时间:2018-06-21 16:28:37

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

我是API世界的新手。我需要在调用任何服务方法之前检查客户端的服务是否仍然有效。可以在客户端通过传递API URL并返回请求状态来完成。但是由于其他一些原因,我需要在我的API中添加一个虚拟方法,该方法只会返回状态代码。因此,从我的客户端来看,我将仅致电http://example.com/alive来检查服务状态。

1)我需要一个Get或Post方法吗?我不会传递任何参数。 2)可以只返回字符串,还是最好使用返回类型为httpresponsemessage的方法?

 public string GetStatus()
    {
        //validate ip address

        return HttpStatusCode.OK.ToString();
    }

2 个答案:

答案 0 :(得分:1)

  

1)我需要使用Get或Post方法吗?我不会通过任何   参数。

可以随意使用其中的任何一个,真的没关系。

  

2)可以只返回字符串还是更好的方法   返回类型为httprequestmessage?

请不要这样做。最好返回HttpStatus 200(确定)。

public IHttpActionResult Ping()
{
    return Ok();
}

答案 1 :(得分:1)

如何使用HEAD。如果您需要在一定的时间间隔内从客户端发送一些数据,以使服务器知道客户端是否还活着,则可以使用POST之类的/ heartbeat或/ sample等。但是,如果您只想检查运行状况服务器的状态。您也可以使用Head。

按照:http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

  

HEAD方法与GET相同,除了服务器不得   在响应中返回一个消息正文。包含的元信息   HTTP标头中对HEAD请求的响应应该相同   响应于GET请求而发送的信息。这种方法可以   用于获取有关隐含实体的元信息   请求,而不转移实体本身。这个方法是   通常用于测试超文本链接的有效性,可访问性,   和最近的修改。

     

对HEAD请求的响应在某种意义上可以是可缓存的   响应中包含的信息可用于更新   先前从该资源缓存的实体。如果新的字段值   指示缓存的实体与当前实体不同(如   将通过Content-Length,Content-MD5,ETag或   最后修改),然后缓存必须将缓存条目视为过期。

已编辑 如果不想返回空结果,也可以使用GET,那么在这种情况下,您可以返回当前日期时间。

[RoutePrefix("ping")]
public class PingController: ApiController {

 [HttpGet]
 [Route("")]
 public IHttpActionResult Get() {
   return Ok(DateTime.UtcNow)
 }

}