如何在Web API中更改返回列表的格式?

时间:2017-11-12 15:13:18

标签: c# asp.net .net asp.net-web-api

我是WEB API的新手,所以请原谅无知。我正在尝试返回特定用户将参加的事件列表,仅此而已。我的代码有效,但它返回的信息比我需要的多。这是我在调用API时返回的内容:[{“$ id”:“1”,“eventID”:“1”},{“$ id”:“2”,“eventID”:“2”}]

我的控制器代码如下:

public HttpResponseMessage Get(string id)
{
    List<GetEventAttend> events = null;
    events = db.userattends.Where(x => x.userID == id).Select(s => new GetEventAttend()
    { eventID = s.eventID }).ToList<GetEventAttend>();

    return Request.CreateResponse(HttpStatusCode.OK, events);
}

这是GetEventAttend的代码:

public class GetEventAttend
{

    public string eventID { get; set; }
}

有什么方法可以以{“1”,“2”}的格式返回吗?

1 个答案:

答案 0 :(得分:1)

你几乎就在那里,但是你可以选择GetEventAttend字段并返回它们,而不是选择新的eventID

public HttpResponseMessage Get(string id)
{
    var events = db.userattends.Where(x => x.userID == id).Select(s => s.eventID).ToList();

    return Request.CreateResponse(HttpStatusCode.OK, events);
}

GetEventAttend类真的那么小,还是仅用于演示目的?如果它只是web api结果的容器而不是你不需要那个类,正如答案所示。

编辑:CodeCaster有一个观点。这个答案将返回一个eventIds数组。这可能已经足够了,但在后期阶段,您可能希望返回一个事件数组,即使它们只包含标识符。因为现在如果您想要包含有关该事件的其他信息,您必须创建一个新api或引入重大更改。

在原始代码中,您可能已经配置了参考处理,请参阅the docs了解如何禁用它:

var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling = 
Newtonsoft.Json.PreserveReferencesHandling.None;