我是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”}的格式返回吗?
答案 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;