public IEnumerable <HalLinkAttribute> CreateHalLinks(ILinkProviderContext context) { if (ButtonStateId != null) { yield return(new HalActionLinkAttribute(typeof(ButtonStatesController), nameof(ButtonStatesController.Get), HalSelfActionLinkAttribute.SelfRelName)); yield return(new HalActionLinkAttribute(typeof(ButtonStatesController), nameof(ButtonStatesController.Apply), Rels.Execute)); } }
public virtual IEnumerable <HalLinkAttribute> CreateHalLinks(ILinkProviderContext context) { var typeInfo = this.GetType().GetTypeInfo(); foreach (var attr in typeInfo.GetCustomAttributes()) { //Grab the self link as the reference for page links var pageLinkAttr = attr as HalSelfActionLinkAttribute; if (pageLinkAttr != null) { //Next link if ((Offset + 1) * Limit < Total) { var builder = new RequestDataBuilder(); AddPageQuery(Rels.Next, builder, Offset + 1, Limit); var next = pageLinkAttr.Href; yield return(new HalLinkAttribute(Rels.Next, next, null, pageLinkAttr.Method, pageLinkAttr.DataMode, requestData: builder.Data)); } //Previous link if (Offset - 1 > -1) { var builder = new RequestDataBuilder(); AddPageQuery(Rels.Previous, builder, Offset - 1, Limit); var prev = pageLinkAttr.Href; yield return(new HalLinkAttribute(Rels.Previous, prev, null, pageLinkAttr.Method, pageLinkAttr.DataMode, requestData: builder.Data)); } //First link var firstBuilder = new RequestDataBuilder(); AddPageQuery(Rels.First, firstBuilder, 0, Limit); var first = pageLinkAttr.Href; yield return(new HalLinkAttribute(Rels.First, first, null, pageLinkAttr.Method, pageLinkAttr.DataMode, requestData: firstBuilder.Data)); //Last link if (Limit != 0) { var lastIndex = Total / Limit; //If there is no remainder this is an even multiple, do not start the last page on the even multiple, but one before it var remainder = Total % Limit; if (remainder == 0 && lastIndex > 0) { --lastIndex; } var builder = new RequestDataBuilder(); AddPageQuery(Rels.Last, builder, lastIndex, Limit); var last = pageLinkAttr.Href; yield return(new HalLinkAttribute(Rels.Last, last, null, pageLinkAttr.Method, pageLinkAttr.DataMode, requestData: builder.Data)); } } } }
public IEnumerable <HalLinkAttribute> CreateHalLinks(ILinkProviderContext context) { if (HasUncommittedChanges) { yield return(new HalActionLinkAttribute(CommitController.Rels.Commit, typeof(CommitController))); } else if (HasUnsyncedChanges) { yield return(new HalActionLinkAttribute(SyncController.Rels.BeginSync, typeof(SyncController))); } else { yield return(new HalActionLinkAttribute(DraftController.Rels.List, typeof(DraftController))); } }
public IEnumerable <HalLinkAttribute> CreateHalLinks(ILinkProviderContext context) { if (HasUncomittedChanges) { yield return(new HalActionLinkAttribute(CommitController.Rels.Commit, typeof(CommitController))); } else { if (NeedsPush) { yield return(new HalActionLinkAttribute(SyncController.Rels.Push, typeof(SyncController))); } if (NeedsPull) { yield return(new HalActionLinkAttribute(SyncController.Rels.Pull, typeof(SyncController))); } } }