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)); }
//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)); }
/// <inheritdoc /> public Task Send(IHttpClientRequestContext requestContext, IRequestSerializationStrategy serializer) { //Make sure to dipose the response return(SendHttpRequest(requestContext, serializer)); }
/// <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)); }
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)); } }
//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)); } }
/// <inheritdoc /> public async Task Send(IHttpClientRequestContext requestContext, IRequestSerializationStrategy serializer) { //Make sure to dipose the response (await SendHttpRequest(requestContext, serializer).ConfigureAwait(false)).Dispose(); }