/// <summary> /// Cretaes a RelatedEntity. /// </summary> /// <param name="relation">Relation string.</param> /// <param name="reference">Reference to the related Entity.</param> public RelatedEntity(string relation, HypermediaObjectReferenceBase reference) { Relations = new List <string> { relation }; Reference = reference; }
public HypermediaCarsRootHto( HypermediaObjectReferenceBase niceCar, object?superCarKey ) : base(hasSelfLink: true) { Links.Add("NiceCar", niceCar); Links.Add("SuperCar", new HypermediaObjectKeyReference(typeof(HypermediaCarHto), superCarKey)); }
public HypermediaEntrypointHto( HypermediaObjectReferenceBase customersRoot, HypermediaObjectReferenceBase carsRoot ) : base(hasSelfLink: true) { Links.Add("CustomersRoot", customersRoot); Links.Add("CarsRoot", carsRoot); }
private string ResolveReferenceRoute(HypermediaObjectReferenceBase reference) { var resolvedAdress = routeResolver.ReferenceToRoute(reference); var query = reference.GetQuery(); resolvedAdress += queryStringBuilder.CreateQueryString(query); return(resolvedAdress); }
private Tuple <string, string> ResolveReferenceRoute(HypermediaObjectReferenceBase reference) { var resolvedRoute = routeResolver.ReferenceToRoute(reference); var query = reference.GetQuery(); var buildRoute = resolvedRoute.Url + queryStringBuilder.CreateQueryString(query); var resolvedRouteAvailableMediaTypes = string.Join(",", resolvedRoute.AvailableMediaTypes); return(new Tuple <string, string>(buildRoute, resolvedRouteAvailableMediaTypes)); }
public object GetHypermediaRouteKeys(HypermediaObjectReferenceBase reference) { if (!this.routeRegister.TryGetKeyProducer(reference.GetHypermediaType(), out var keyProducer)) { return(new { }); } var key = reference.GetKey(keyProducer); if (key == null) { return(new { }); } return(key); }
public string ReferenceToRoute(HypermediaObjectReferenceBase reference) { var lookupType = reference.GetHypermediaType(); // ExternalReference object is not registered in the RouteRegister and provides its own URI if (typeof(ExternalReference).IsAssignableFrom(lookupType)) { var externalReferenceObject = reference.GetInstance() as ExternalReference; if (externalReferenceObject == null) { throw new HypermediaRouteException("Can not get instance for ExternalReference."); } return(externalReferenceObject.ExternalUri.ToString()); } var routeKeys = this.routeKeyFactory.GetHypermediaRouteKeys(reference); return(this.GetRouteByType(lookupType, routeKeys)); }
public ResolvedRoute ReferenceToRoute(HypermediaObjectReferenceBase reference) { var lookupType = reference.GetHypermediaType(); // ExternalReference object is not registered in the RouteRegister and provides its own URI if (externalReferenceTypeInfo.IsAssignableFrom(lookupType)) { if (!(reference.GetInstance() is ExternalReference externalReferenceObject)) { throw new HypermediaRouteException("Can not get instance for ExternalReference."); } // we assume get here since external references will be links only for now return(new ResolvedRoute(externalReferenceObject.ExternalUri.ToString(), HttpMethod.GET, externalReferenceObject.AvailableMediaTypes)); } if (internalReferenceTypeInfo.IsAssignableFrom(lookupType)) { if (!(reference.GetInstance() is InternalReference internalReference)) { throw new HypermediaRouteException("Can not get instance for InternalReference."); } // we assume get here since external references will be links only for now var routeInfo = new RouteInfo(internalReference.RouteName, HttpMethod.GET); var resolvedInternalRoute = RouteUrl(routeInfo, internalReference.RouteParameters); resolvedInternalRoute.AvailableMediaTypes = internalReference.AvailableMediaTypes; return(resolvedInternalRoute); } if (reference is HypermediaExternalObjectReference) { throw new HypermediaRouteException("Can not get instance for HypermediaExternalObjectReference."); } var routeKeys = this.routeKeyFactory.GetHypermediaRouteKeys(reference); return(this.GetRouteByType(lookupType, routeKeys)); }
/// <summary> /// Convenience function: Add a HypermediaObjectReferenceBase to the Links Dictionary. /// If a related entity with the same relations is present it is replaced. /// </summary> /// <param name="relations">The relations to use</param> /// <param name="reference">To be added.</param> public void Add(IReadOnlyCollection <string> relations, HypermediaObjectReferenceBase reference) { var relatedEntity = new RelatedEntity(relations, reference); Add(relatedEntity); }
/// <summary> /// Convenience function: Add a HypermediaObjectReferenceBase to the Links Dictionary. /// If a related entity with the same relation is present it is replaced. /// </summary> /// <param name="relation">The relation to use</param> /// <param name="reference">To be added.</param> public void Add(string relation, HypermediaObjectReferenceBase reference) { var relatedEntity = new RelatedEntity(relation, reference); Add(relatedEntity); }
/// <summary> /// Returns a 201 Created and puts a Location in the header pointing to the HypermediaObject. /// </summary> /// <param name="controller"></param> /// <param name="hypermediaObjectReferenceBase">Reference to the created HypermediaObject</param> /// <returns></returns> public static ActionResult Created(this ControllerBase controller, HypermediaObjectReferenceBase hypermediaObjectReferenceBase) { return(controller.Ok(new HypermediaEntityLocation(hypermediaObjectReferenceBase, HttpStatusCode.Created))); }
public HypermediaEntityLocation(HypermediaObjectReferenceBase entityRef, HttpStatusCode httpStatusCode) { this.HttpStatusCode = httpStatusCode; this.EntityRef = entityRef; }
/// <summary> /// Adds Entity using a list of realations. /// </summary> /// <param name="entitiesList">Entities List.</param> /// <param name="relations">Relations for the Entity.</param> /// <param name="entity">The added Entity.</param> public static void Add(this List <RelatedEntity> entitiesList, List <string> relations, HypermediaObjectReferenceBase entity) { entitiesList.Add(new RelatedEntity(relations, entity)); }
/// <summary> /// Cretaes a RelatedEntity. /// </summary> /// <param name="relations">List of relations as string, should at least contain one relation.</param> /// <param name="reference">Reference to the related Entity.</param> public RelatedEntity(List <string> relations, HypermediaObjectReferenceBase reference) { Relations = new List <string>(relations); Reference = reference; }