【问题标题】:What should be returned from the Get request in the web API?Web API 中的 Get 请求应该返回什么?
【发布时间】:2019-03-11 21:05:28
【问题描述】:

我正在尝试返回来自数据库调用的对象列表,如下所示:

public class ObjectA
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ObjectB ObjB { get; set; }
}

public class ObjectB
{
    public int Id { get; set; }
    public string Field { get; set; }
}

在 web api 中调用以从数据库中获取项目

    [HttpGet]
    public List<ObjectA> GetObjects([FromUri] int id)
    {
        var objs= objectRepo.All.Where(x => x.Id== id).ToList();
        return objs;
    }

从 HTTPCLIENT 调用

HttpClient client = new HttpClient(new HttpClientHandler { UseDefaultCredentials = true });
client.BaseAddress = new Uri("http://localhost:2478/api/controller/");
var result= client.GetAsync("GetObjects?id=" + 5);

有没有更好的方法来设置 get 方法?使用 httpclient 检索返回的结果后如何使用?

我不需要将对象 B 作为属于对象 A 的对象,但我确实需要对象 B 的字段。

【问题讨论】:

  • 你说的设置get方法是什么意思?
  • @meJustAndrew 我想我的意思是说,返回这样的对象列表可以吗?如果可能的话,是否应该将参数传递到 Uri 而不是从正文中传递。
  • 返回IActionResult(或核心中的ActionResult&lt;T&gt;)有好处;看看这个:stackoverflow.com/a/37998841/1186321
  • 我已经回答了您的问题,顺便说一下,您在ObjectA 中缺少ObjectB 属性的名称,我将编辑您的问题以添加它。

标签: .net asp.net-mvc httpclient


【解决方案1】:

来自cmets:

可以返回这样的对象列表吗?

如果您可以控制 API,并且只需要 ObjectA 中的 ObjectB,那么我建议您更改 API 以仅返回 ObjectBs 或仅返回 @ 中的 Field 987654325@。例如:

objectRepo.All.Where(x => x.Id == id).Select(x => x.ObjB).ToList();

这将返回ObjectBs 的列表。

如果可能的话,是否应该将参数传递到 Uri 而不是从主体中传递

是的,可以使用[HttpGet("{id}")]在URI中传递。

最终你将拥有:

[HttpGet("{id}")]
public List<ObjectB> GetObjects(int id)
{
    return objectRepo.All.Where(x => x.Id == id).Select(x => x.ObjB).ToList();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2021-08-08
    • 2014-07-09
    • 2017-02-25
    • 2021-09-11
    相关资源
    最近更新 更多