我是API世界的新手。我需要在调用任何服务方法之前检查客户端的服务是否仍然有效。可以在客户端通过传递API URL并返回请求状态来完成。但是由于其他一些原因,我需要在我的API中添加一个虚拟方法,该方法只会返回状态代码。因此,从我的客户端来看,我将仅致电http://example.com/alive来检查服务状态。
1)我需要一个Get或Post方法吗?我不会传递任何参数。 2)可以只返回字符串,还是最好使用返回类型为httpresponsemessage的方法?
public string GetStatus()
{
//validate ip address
return HttpStatusCode.OK.ToString();
}
答案 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)
}
}