Web API中的“获取”请求应返回什么?

时间:2019-03-11 21:05:29

标签: .net asp.net-mvc httpclient

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

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的字段。

1 个答案:

答案 0 :(得分:1)

从评论中:

  

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

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

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

这将返回ObjectB的列表。

  

如果可以的话,应将参数传递到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();
}