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)); }
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)); }