尝试将hal集成到现有的asp.net mvc webapi2项目中。 我有来自api的每个请求都返回的包装器对象。
{
"version": "1.0.0.0",
"error": false,
"message": "OK",
"status": "200",
"data": [
这里的数据是来自api请求的有效负载(如果有有效负载)。 我试图只在该对象中包含hal。 - 所以只有在嵌套对象中,所以api调用的响应将如下所示:
Request.CreateResponse(HttpStatusCode.OK, new JsonResponse2<ChallengeViewModel>(resultViewModel));
[DataContract]
public class JsonResponse2<T> where T : Representation
{
private MessageCode _messageCode;
private string _messageString;
public MessageCode MessageCode { get { return _messageCode; } }
/// <summary>
/// The version of the API
/// </summary>
/// <value>
/// The version.
/// </value>
[DataMember(Name = "version")]
public string Version
{
.....
[DataMember(Name = "data")]
public T Data
{
get { return data; }
private set { data = value; }
}
在输出中对数据进行海量化时发生的事情是我没有hal序列化的字段。 当我返回数据时 return Request.CreateResponse(HttpStatusCode.OK,resultViewModel); - 没有包装物,一切都很好。看看图书馆但不想改变它,如果我缺少的东西非常简单......
这是我试图返回的表示
[DataContract]
public class ChallengeViewModel : Representation
{
[DataMember]
public Guid Id { get; set; }
[DataMember]
public Guid CompetitionId { get; set; }
[DataMember(Name = "name")]
public string Name { get; set; }
[DataMember(Name = "requiredRank")]
public int RequiredRank { get; set; }
[DataMember(Name = "totalEntries")]
public int TotalEntrants { get; set; }
[DataMember(Name = "type")]
public Guid ChallengeTypeId { get; set; }
public override string Rel
{
get { return LinkTemplates.Configurations.Challenge.Rel; }
set { }
}
public override string Href
{
get { return LinkTemplates.Configurations.Challenge.CreateLink(new { id = Id }).Href; }
set { }
}
protected override void CreateHypermedia()
{
Links.Add(LinkTemplates.Configurations.GameConfig.CreateLink(new { id = Id }));
}
}
正如我所说的,没有包装类可以正常工作,我为每个响应设置了一些通用的工作人员。
所以回顾一下
Request.CreateResponse(HttpStatusCode.OK, new JsonResponse2<ChallengeViewModel>(resultViewModel));
dosn't searlize well
Request.CreateResponse(HttpStatusCode.OK, resultViewModel);
serializes well with the HAL properties
如何在API响应时让HAL在包装类中工作。