在使用API时,我通常会在从IHttpActionResult接口返回一个方法(例如OK())的地方编写它们,并将返回的对象作为参数放在OK()方法中。或者我可以返回我从数据库中检索到的对象。
示例代码:使用 IHttpActionResult
[Route("GetAll1")]
[HttpGet]
public IHttpActionResult GetAll1()
{
List<ContactWebLink> contactWebLinks = new List<ContactWebLink>();
try
{
Manager<ContactWebLink> contactWebLinkManager = new Manager<ContactWebLink>(Unit);
contactWebLinks = contactWebLinkManager.FindAll(a => a.IsDeleted == false, null, null, null);
return Ok(contactWebLinks);
}
catch
{
return InternalServerError();
}
finally
{
contactWebLinks = null;
}
}
Vs 使用对象的I类返回
[Route("GetAll2")]
[HttpGet]
public List<ContactWebLink> GetAll2()
{
List<ContactWebLink> contactWebLinks = new List<ContactWebLink>();
try
{
Manager<ContactWebLink> contactWebLinkManager = new Manager<ContactWebLink>(Unit);
contactWebLinks = contactWebLinkManager.FindAll(a => a.IsDeleted == false, null, null, null);
return contactWebLinks;
}
catch
{
return null;
}
finally
{
contactWebLinks = null;
}
}
使用邮递员测试结果,我发现差异无论如何。两者都会产生200响应代码(当没有异常发生时)。两者都返回相同的结果(我从数据库中检索的实体)。
那么使用这两种方法之间的区别是什么?我应该何时使用另一种方法?
答案 0 :(得分:1)
您可以在使用HTTP
时设置IHttpActionReslt
状态代码,例如返回对象和200(成功),或204和否内容,或自定义错误消息等。
例如
BadRequest("Item not found");//404
Ok(myObject);//200
或者您可以指定状态代码,例如:
return StatusCode(HttpStatusCode.NoContent);
答案 1 :(得分:0)
我建议使用IHttpActionResult
。你说错了,在成功的情况下,没有区别。当出现错误时,您可以通过返回更准确的代码为客户提供更多信息。
例如,您使用InternalServerError
(500)。您可以提供更丰富的错误:
return
ResponseMessage(
Request.CreateErrorResponse(
HttpStatusCode.InternalServerError,
"There has been an error on the server regarding X"));
您也可以返回任何REST代码。