返回IHttpActionResult和返回对象之间的区别

时间:2017-02-27 14:18:39

标签: c# json asp.net-mvc api postman

在使用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响应代码(当没有异常发生时)。两者都返回相同的结果(我从数据库中检索的实体)。

那么使用这两种方法之间的区别是什么?我应该何时使用另一种方法?

2 个答案:

答案 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代码。