예제 #1
0
        public virtual async Task <EntityResponse <T> > PutAsync <T>(PutEntityRequest <T> request) where T : class
        {
            var httpRequest = CreateHttpRequest(request);

            using (var res = await SendAsync(httpRequest).ForAwait())
            {
                return(ProcessEntityResponse(request, res));
            }
        }
        protected virtual string GetEntityRev <T>(PutEntityRequest <T> request) where T : class
        {
            if (!string.IsNullOrWhiteSpace(request.ExplicitRev))
            {
                return(request.ExplicitRev);
            }

            return(Reflector.RevMember.GetValueFrom(request.Entity));
        }
예제 #3
0
        public virtual async Task <EntityResponse <T> > PutAsync <T>(PutEntityRequest <T> request, CancellationToken cancellationToken = default) where T : class
        {
            var httpRequest = PutHttpRequestFactory.Create(request);

            using (var res = await SendAsync(httpRequest, cancellationToken).ForAwait())
            {
                return(await ProcessEntityResponseAsync(request, res).ForAwait());
            }
        }
        protected virtual string GetEntityId <T>(PutEntityRequest <T> request) where T : class
        {
            var entityId = Reflector.IdMember.GetValueFrom(request.Entity);

            Ensure.That(entityId, "request")
            .WithExtraMessageOf(() => "Could not extract entity Id from entity being PUT. Ensure member exists.")
            .IsNotNullOrWhiteSpace();

            return(entityId);
        }
        public virtual HttpRequest Create <T>(PutEntityRequest <T> request) where T : class
        {
            var id          = Reflector.IdMember.GetValueFrom(request.Entity);
            var rev         = Reflector.RevMember.GetValueFrom(request.Entity);
            var httpRequest = CreateFor <PutEntityRequest <T> >(HttpMethod.Put, GenerateRequestUrl(id, rev));

            httpRequest.SetIfMatch(rev);
            httpRequest.SetContent(SerializeEntity(request.Entity));

            return(httpRequest);
        }
        public virtual HttpRequest Create <T>(PutEntityRequest <T> request) where T : class
        {
            Ensure.That(request, "request").IsNotNull();

            var entityId  = GetEntityId(request);
            var entityRev = GetEntityRev(request);

            return(new HttpRequest(HttpMethod.Put, GenerateRelativeUrl(entityId, entityRev, request.Batch))
                   .SetRequestTypeHeader(request.GetType())
                   .SetIfMatchHeader(entityRev)
                   .SetJsonContent(SerializeEntity(request.Entity)));
        }
예제 #7
0
        protected virtual EntityResponse <T> ProcessEntityResponse <T>(PutEntityRequest <T> request, HttpResponseMessage response) where T : class
        {
            var entityResponse = EntityResponseFactory.Create <T>(response);

            entityResponse.Content = request.Entity;

            if (entityResponse.IsSuccess)
            {
                Reflector.RevMember.SetValueTo(entityResponse.Content, entityResponse.Rev);
            }

            return(entityResponse);
        }
예제 #8
0
        protected virtual string GetEntityId <T>(PutEntityRequest <T> request) where T : class
        {
            if (!string.IsNullOrWhiteSpace(request.ExplicitId))
            {
                return(request.ExplicitId);
            }

            var entityId = Reflector.IdMember.GetValueFrom(request.Entity);

            if (string.IsNullOrWhiteSpace(entityId))
            {
                throw new ArgumentException("Could not extract entity Id from entity being PUT. Ensure member exists.", nameof(request));
            }

            return(entityId);
        }
예제 #9
0
 protected virtual HttpRequest CreateHttpRequest <T>(PutEntityRequest <T> request) where T : class
 {
     return(PutHttpRequestFactory.Create(request));
 }
예제 #10
0
 protected virtual string GetEntityRev <T>(PutEntityRequest <T> request) where T : class
 {
     return(Reflector.RevMember.GetValueFrom(request.Entity));
 }
예제 #11
0
        protected virtual async Task <EntityResponse <T> > ProcessEntityResponseAsync <T>(PutEntityRequest <T> request, HttpResponseMessage response) where T : class
        {
            var entityResponse = await EntityResponseFactory.CreateAsync <T>(response).ForAwait();

            entityResponse.Content = request.Entity;

            if (!string.IsNullOrWhiteSpace(request.ExplicitId))
            {
                Reflector.IdMember.SetValueTo(entityResponse.Content, entityResponse.Id);
            }

            if (entityResponse.IsSuccess)
            {
                Reflector.RevMember.SetValueTo(entityResponse.Content, entityResponse.Rev);
            }

            return(entityResponse);
        }