public async Task <TResult> AsyncWithReturn <TResult>(IInvocation invocation)
        {
            //TODO: Handle return data deserialization.
            IHttpClientRequestContext context = RequestContextFactory.CreateContext(new CastleCoreInvocationCallContextAdapter(invocation),
                                                                                    new CastleCoreInvocationParametersContextAdapter(invocation));

            //If it has no body we don't need to provide or produce serializers for it.
            if (!context.BodyContext.HasBody)
            {
                return(await ProxyClient.Send <TResult>(context, DeserializerFactory));
            }

            //We need to look at the request to determine which serializer strategy should be used.
            IRequestSerializationStrategy serializer = SerializerFactory.SerializerFor(context.BodyContext.ContentAttributeType);

            //Because we don't need to get any returned information we can just send it
            return(await ProxyClient.Send <TResult>(context, serializer, DeserializerFactory).ConfigureAwait(false));
        }
Ejemplo n.º 2
0
        //TODO: Document
        private Task <IRestResponse> SendHttpRequest(IHttpClientRequestContext requestContext, IRequestSerializationStrategy serializer)
        {
            if (requestContext == null)
            {
                throw new ArgumentNullException(nameof(requestContext));
            }
            if (serializer == null)
            {
                throw new ArgumentNullException(nameof(serializer));
            }

            //Build a request message targeted towards the base URL and the action path built by the caller.
            RestRequest request = new RestRequest(ConvertToRestSharpMethod(requestContext.RequestMethod));

            request.Resource = BuildFullUrlPath(requestContext);

            WriteBodyContent(requestContext, serializer, request);
            WriteHeaders(requestContext, request);
            return(SendBaseRequest(requestContext, request));
        }
Ejemplo n.º 3
0
 /// <inheritdoc />
 public Task Send(IHttpClientRequestContext requestContext, IRequestSerializationStrategy serializer)
 {
     //Make sure to dipose the response
     return(SendHttpRequest(requestContext, serializer));
 }
Ejemplo n.º 4
0
        /// <inheritdoc />
        public async Task <TReturnType> Send <TReturnType>(IHttpClientRequestContext requestContext, IRequestSerializationStrategy serializer, IDeserializationStrategyFactory deserializationFactory)
        {
            if (requestContext == null)
            {
                throw new ArgumentNullException(nameof(requestContext));
            }
            if (serializer == null)
            {
                throw new ArgumentNullException(nameof(serializer));
            }

            IRestResponse response = await SendHttpRequest(requestContext, serializer).ConfigureAwait(false);

            return(await FindValidDeserializer(deserializationFactory, response)
                   .DeserializeAsync <TReturnType>(new RestSharpResponseBodyReader(response))
                   .ConfigureAwait(false));
        }
Ejemplo n.º 5
0
 private static void WriteBodyContent(IHttpClientRequestContext requestContext, IRequestSerializationStrategy serializer, RestRequest request)
 {
     //Write the body first to avoid messing with the headers
     if (requestContext.BodyContext.HasBody)
     {
         serializer.TrySerialize(requestContext.BodyContext.Body, new RestSharpRequestBodyWriter(request));
     }
 }
Ejemplo n.º 6
0
        //TODO: Document
        private async Task <HttpResponseMessage> SendHttpRequest(IHttpClientRequestContext requestContext, IRequestSerializationStrategy serializer)
        {
            if (requestContext == null)
            {
                throw new ArgumentNullException(nameof(requestContext));
            }
            if (serializer == null)
            {
                throw new ArgumentNullException(nameof(serializer));
            }

            //Build a request message targeted towards the base URL and the action path built by the caller.
            using (HttpRequestMessage request = new HttpRequestMessage(requestContext.RequestMethod, BuildFullUrlPath(requestContext)))
            {
                WriteBodyContent(requestContext, serializer, request);
                WriteHeaders(requestContext, request);
                return(await SendBaseRequest(requestContext, request).ConfigureAwait(false));
            }
        }
Ejemplo n.º 7
0
 /// <inheritdoc />
 public async Task Send(IHttpClientRequestContext requestContext, IRequestSerializationStrategy serializer)
 {
     //Make sure to dipose the response
     (await SendHttpRequest(requestContext, serializer).ConfigureAwait(false)).Dispose();
 }