Пример #1
0
        private Task <HttpResponseMessage> SendLambdaAsync(Lambda lambda, IAPIClientInterceptor interceptor)
        {
            if (lambda == null)
            {
                throw new ArgumentNullException(nameof(lambda));
            }

            if (interceptor == null)
            {
                throw new ArgumentNullException(nameof(interceptor));
            }

            var methodInfo = lambda.MethodInfo;
            var parameters = lambda.CreateParameters(APIClientParameterInfo.Make);

            if (!(Attribute.GetCustomAttribute(methodInfo, typeof(APIClientAttribute)) is APIClientAttribute methodAttribute))
            {
                throw new NotSupportedException($"APICall attribute is missing from Method signature");
            }

            var url = methodAttribute.URL;

            var method  = new HttpMethod(methodAttribute.Method);
            var builder = new StringBuilder(url);

            BindParameters(parameters, url, builder);
            BindQuery(parameters, url, builder);

            var request = new HttpRequestMessage()
            {
                RequestUri = new Uri(builder.ToString(), default(UriKind)),
                Method     = method,
            };

            var body = parameters.SingleOrDefault(x => x.IsHandled);

            interceptor.Prepare(request, Environment, body);

            return(SendAsync(request));
        }