gpt4 book ai didi

c# - 何时返回 IHttpActionResult 与对象

转载 作者:IT王子 更新时间:2023-10-29 04:21:59 28 4
gpt4 key购买 nike

在使用 ASP.NET Web API 的示例中,我看到两种不同的方法用于将数据返回给调用 jQuery 函数。第一个方法返回 Client 类型的对象,但我不确定第二个方法返回什么。

方法 #1(返回 Client 对象)

public IEnumerable<Client> GetAllClients()
{
using (var context = new PQRSModel.PQRSEntities())
{
context.Configuration.ProxyCreationEnabled = false;
var query = context.Clients.OrderBy(c = c.OrgName);
var customers = query.ToList();
return customers;
}
}

方法 #2(IHttpActionResult 有什么好处?)

public IHttpActionResult GetClient(int clientId)
{
using (var context = new PQRSModel.PQRSEntities())
{
context.Configuration.ProxyCreationEnabled = false;
var client = context.Clients.FirstOrDefault(c = c.ID == clientId);
if (client == null)
{
return NotFound();
}
return Ok(client);
}
}

如果第二种方法找到单个对象,是否有任何原因不能同时返回 Client 对象类型?

最佳答案

返回 IHttpActionResult 提供了很好的关注点分离

您的 Controller 可以专注于以最明智的方式(状态代码、错误消息等)响应请求。另一个(服务)层可以专注于实际检索和转换业务数据。

副作用是,您的 Controller 方法变得更加单元测试。考虑以下简单示例:

public class MyController : ApiController
{
//or better yet, dependency-inject this
SomeService _service = new SomeService();

public IHttpActionResult Get(int id)
{
if (id < 0)
return BadRequest("Some error message");

var data = _service.GetData(id);

if (data == null)
return NotFound();

return Ok(data);
}
}

不仅仅通过阅读就可以理解此方法的逻辑,而且您现在可以更轻松自然地测试逻辑,例如(使用 NUnit 语法):

[TestFixture]
public class MyControllerTests
{
[Test]
public void Get_WithIdLessThan0_ReturnsBadRequest()
{
var controller = new MyController();
int id = -1;

IHttpActionResult actionResult = controller.Get(id);

Assert.IsInstanceOf<BadRequestErrorMessageResult>(actionResult);
}
}

同样,您可以模拟服务层并测试当您将已知的 id 参数提供给 Controller 等时会发生什么。

这里有一篇关于 Unit Testing Controllers in Web Api 的好文章

关于c# - 何时返回 IHttpActionResult 与对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23961082/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com