我对HAL很新,并且使用它有问题

时间:2016-10-28 14:50:38

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

尝试将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在包装类中工作。

我用于HAL的库是https://github.com/JakeGinnivan/WebApi.Hal

0 个答案:

没有答案