2017-02-27 142 views
2

当遇到API时,我通常会在我从IHttpActionResult接口(例如OK())返回方法的位置写入它们,并将返回的对象作为OK()方法中的参数放置。或者我可以返回从数据库中检索到的对象。返回IHttpActionResult和返回对象之间的区别

示例代码:使用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的使用对象的类,我回到

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

那么使用这两种方法之间的区别,以及我应该什么时候使用两种方法之间的区别?

回答

1

IHttpActionReslt使用时例如返回对象和200(成功),或204和无内容,或自定义错误消息等

例如

BadRequest("Item not found");//404 

Ok(myObject);//200 

可以设置HTTP状态码或者你可以指定状态代码,例如:

return StatusCode(HttpStatusCode.NoContent); 
+0

这是我使用IHttpActionReslt时获得的唯一好处吗? –

+1

在我看来,这是一个很大的好处 – Alex

+0

但都返回适当的HTTP状态码。 –

0

我会推荐使用IHttpActionResult。你的正确,在成功的情况下,没有任何区别。当出现错误时,您可以通过返回更准确的代码向客户提供更多信息。

例如,您使用InternalServerError(500)。你可以给出一个更丰富的错误:

return  
     ResponseMessage(
      Request.CreateErrorResponse(
       HttpStatusCode.InternalServerError, 
       "There has been an error on the server regarding X")); 

你也可以返回任何REST代码。

+1

我将'IHttpActionResult'比喻为使用隐式'var'而不是显式类型。重构变得如此简单。 –

相关问题