public static Uri GenerateBlobFileSasLink(this MemberInfo member, string blobName, TimeSpan?lifespan = default(TimeSpan?)) { var containerName = member.BlobContainerName(); return(GenerateBlobFileSasLink(containerName, blobName, lifespan: lifespan)); }
public object UpdateInstance(string propertyKey, JsonReader reader, object instance, ParameterInfo parameterInfo, MemberInfo memberInfo, IApplication httpApp, IHttpRequest request) { var containerName = memberInfo.BlobContainerName(); var blobRef = GetBlobRef(); memberInfo.SetPropertyOrFieldValue(instance, blobRef); return(instance); IBlobRef GetBlobRef() { if (reader.TokenType == JsonToken.Bytes) { var bytes = reader.ReadAsBytes(); var blobRefRaw = new BlobRefRawData(containerName, bytes); return(blobRefRaw); } if (reader.TokenType != JsonToken.String) { throw new ArgumentException($"Cannot parse token of type {reader.TokenType} into BlobRef"); } var blobRefRawStr = (string)reader.Value; if (Guid.TryParse(blobRefRawStr, out Guid guidValue)) { var idGuidStr = guidValue.AsBlobName(); return(new BlobRefStorage { Id = idGuidStr, ContainerName = containerName, }); } if (Uri.TryCreate(blobRefRawStr, UriKind.Absolute, out Uri rawUri)) { return(new BlobRefUrl(rawUri)); } throw new Exception($"Cannot parse {blobRefRawStr} into {nameof(IBlobRef)}."); } }
public TResult Bind <TResult>(IDictionary <string, EntityProperty> value, Type type, string pathStart, MemberInfo member, Func <object, TResult> onBound, Func <TResult> onFailedToBind) { var containerName = member.BlobContainerName(); return(GetId(pathStart, id => { var blobRef = new BlobRefStorage { Id = id, ContainerName = containerName, }; return onBound(blobRef); }, () => { return onBound(default(IBlobRef)); })); TResult GetId(string path, Func <string, TResult> onFound, Func <TResult> onNoValue) { if (!value.TryGetValue(path, out EntityProperty epValue)) { if (!member.TryGetAttributeInterface(out IMigrateBlobIdAttribute migrateBlobId)) { return(onNoValue()); } // terminate recursion if (migrateBlobId.IdName.Equals(path, StringComparison.Ordinal)) { return(onNoValue()); } return(GetId(migrateBlobId.IdName, onFound, onNoValue)); } if (epValue.PropertyType == EdmType.String) { if (epValue.StringValue.HasBlackSpace()) { return(onFound(epValue.StringValue)); } return(onNoValue()); } if (epValue.PropertyType == EdmType.Guid) { var guidValue = epValue.GuidValue; if (guidValue.HasValue) { return(onFound(guidValue.Value.ToString("N"))); } } return(onNoValue()); } }