Example #1
0
        /// <summary>
        ///
        /// </summary>
        /// <returns>The async.</returns>
        /// <param name="restPipe">Rest pipe.</param>
        /// <param name="httpMethod">Http method.</param>
        /// <param name="onResponse">On answer.</param>
        private static async Task <RestPipeResponse> ExecuteAsync(this RestPipeRequest restPipe, HttpMethod httpMethod, Action <RestPipeResponse> onResponse = null)
        {
            restPipe.Config.HttpMethod = httpMethod;
            var result = await restPipe.ExecuteAsync().ConfigureAwait(false);

            onResponse?.Invoke(result);
            return(new RestPipeResponse(result));
        }
Example #2
0
 /// <summary>
 /// Body the specified restPipe, body and mimeType.
 /// </summary>
 /// <returns>The body.</returns>
 /// <param name="restPipe">Rest pipe.</param>
 /// <param name="body">Body.</param>
 /// <param name="mimeType">MIME type.</param>
 public static RestPipeRequest BodyAsMimeType(this RestPipeRequest restPipe, object body, RestMimeType mimeType)
 {
     return(restPipe.Pipe((p) =>
     {
         p.Config.Body = body;
         p.Config.MimeType = mimeType;
     }));
 }
Example #3
0
        /// <summary>
        /// Executes the async.
        /// </summary>
        /// <returns>The async.</returns>
        /// <param name="restPipe">Rest pipe.</param>
        /// <param name="httpMethod">Http method.</param>
        /// <param name="onResponse">On response.</param>
        /// <typeparam name="T">The 1st type parameter.</typeparam>
        /// <exception cref="T:System.NotImplementedException"></exception>
        private static async Task <RestPipeResponse <T> > ExecuteAsync <T>(this RestPipeRequest restPipe, HttpMethod httpMethod, Action <RestPipeResponse <T>, T> onResponse = null)
        {
            restPipe.Config.HttpMethod = httpMethod;
            var result = new RestPipeResponse <T>(await restPipe.ExecuteAsync().ConfigureAwait(false));

            result.Data = default(T);
            if (result.Config.HttpResponseMessage != null && result.Config.HttpResponseMessage.IsSuccessStatusCode)
            {
                #region convert To T
                try
                {
                    var mediaTye = restPipe.Config.HttpResponseMessage.Content.Headers.ContentType.MediaType;
                    if (RestMimeTypeConvertJson.Contains(mediaTye))
                    {
                        result.Data = JsonConvert.DeserializeObject <T>(await restPipe.Config.HttpResponseMessage.Content.ReadAsStringAsync().ConfigureAwait(false));
                    }
                    else if (RestMimeTypeConvertText.Contains(mediaTye))
                    {
                        if (typeof(string).GetTypeInfo().IsAssignableFrom(typeof(T)))
                        {
                            result.Data = (T)(object)(await restPipe.Config.HttpResponseMessage.Content.ReadAsStringAsync().ConfigureAwait(false));
                        }
                    }
                    else if (RestMimeTypeConvertRaw.Contains(mediaTye))
                    {
                        if (typeof(byte[]).GetTypeInfo().IsAssignableFrom(typeof(T)))
                        {
                            result.Data = (T)(object)(await restPipe.Config.HttpResponseMessage.Content.ReadAsByteArrayAsync().ConfigureAwait(false));
                        }
                        else if (typeof(Stream).GetTypeInfo().IsAssignableFrom(typeof(T)))
                        {
                            result.Data = (T)(object)(await restPipe.Config.HttpResponseMessage.Content.ReadAsStreamAsync().ConfigureAwait(false));
                        }
                    }
                    else
                    {
                    }
                }
                catch (Exception ex)
                {
                    result.Config.Exception = ex;
                }
                #endregion
            }
            onResponse?.Invoke(result, result.Data);
            return(result);
        }
Example #4
0
 /// <summary>
 /// Parameter the specified restPipe, key and value.
 /// </summary>
 /// <returns>The parameter.</returns>
 /// <param name="restPipe">Rest pipe.</param>
 /// <param name="key">Key.</param>
 /// <param name="value">Value.</param>
 public static RestPipeRequest Parameter(this RestPipeRequest restPipe, string key, string value)
 {
     return(restPipe.Pipe(p => p.Config.Parameters[key] = value));
 }
Example #5
0
 /// <summary>
 /// Traces the value async.
 /// </summary>
 /// <returns>The value async.</returns>
 /// <param name="restPipe">Rest pipe.</param>
 /// <param name="onResponse">On response.</param>
 /// <typeparam name="T">The 1st type parameter.</typeparam>
 public static async Task <T> TraceValueAsync <T>(this RestPipeRequest restPipe, Action <RestPipeResponse <T>, T> onResponse = null)
 {
     return((await restPipe.ExecuteAsync <T>(HttpMethod.Trace, onResponse).ConfigureAwait(false)).Data);
 }
Example #6
0
 /// <summary>
 /// Traces the async.
 /// </summary>
 /// <returns>The async.</returns>
 /// <param name="restPipe">Rest pipe.</param>
 /// <param name="onResponse">On response.</param>
 public static async Task <RestPipeResponse> TraceAsync(this RestPipeRequest restPipe, Action <RestPipeResponse> onResponse = null)
 {
     return(await restPipe.ExecuteAsync(HttpMethod.Trace, onResponse).ConfigureAwait(false));
 }
Example #7
0
 /// <summary>
 /// Optionses the async.
 /// </summary>
 /// <returns>The async.</returns>
 /// <param name="restPipe">Rest pipe.</param>
 /// <param name="onResponse">On response.</param>
 /// <typeparam name="T">The 1st type parameter.</typeparam>
 public static async Task <RestPipeResponse <T> > OptionsResponseAsync <T>(this RestPipeRequest restPipe, Action <RestPipeResponse <T>, T> onResponse = null)
 {
     return(await restPipe.ExecuteAsync <T>(HttpMethod.Options, onResponse).ConfigureAwait(false));
 }
Example #8
0
 /// <summary>
 /// Path the specified restPipe and urlDetails.
 /// </summary>
 /// <returns>The path.</returns>
 /// <param name="restPipe">Rest pipe.</param>
 /// <param name="urlDetails">URL details.</param>
 public static RestPipeRequest Path(this RestPipeRequest restPipe, params string[] urlDetails)
 {
     return(restPipe.Pipe(p => p.Config.Path = urlDetails.ToList()));
 }
Example #9
0
 /// <summary>
 /// Initializes a new instance of the <see cref="T:EifelMono.Rest.RestPipe"/> class.
 /// </summary>
 /// <param name="restPipe">Rest pipe.</param>
 public RestPipeRequest(RestPipeRequest restPipe) : this()
 {
     Config = restPipe.Config;
 }
Example #10
0
 /// <summary>
 /// Proxy the specified restPipe and urlDetails.
 /// </summary>
 /// <returns>The proxy.</returns>
 /// <param name="restPipe">Rest pipe.</param>
 /// <param name="proxy">WebProxy</param>
 public static RestPipeRequest Proxy(this RestPipeRequest restPipe, IWebProxy proxy)
 {
     return(restPipe.Pipe((p) => p.Config.Proxy = proxy));
 }
Example #11
0
        /// <summary>
        /// Executes the aync.
        /// </summary>
        /// <param name="restPipe">Rest pipe.</param>
        private static async Task <RestPipeResponse> ExecuteAsync(this RestPipeRequest restPipe)
        {
            try
            {
                if (restPipe.Config.HttpClient == null)
                {
                    if (restPipe.Config.HttpClientHandler == null)
                    {
                        restPipe.Config.HttpClientHandler = new HttpClientHandler
                        {
                            CookieContainer       = restPipe.Config.CookieContainer,
                            UseCookies            = restPipe.Config.CookieContainer != null,
                            UseDefaultCredentials = false,
                            Proxy    = restPipe.Config.Proxy,
                            UseProxy = restPipe.Config.Proxy != null,
                        };

                        if (restPipe.Config.HttpClientHandler.SupportsAutomaticDecompression)
                        {
                            restPipe.Config.HttpClientHandler.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
                        }
                    }
                    restPipe.Config.HttpClient = new HttpClient(restPipe.Config.HttpClientHandler);
                }
                var uriString = restPipe.Config.BaseAddress;
                foreach (var path in restPipe.Config.Path)
                {
                    if (!string.IsNullOrEmpty(path))
                    {
                        uriString = $"{uriString.Trim().TrimEnd('/')}/{path.Trim().TrimStart('/')}";
                    }
                }

                foreach (var kv in restPipe.Config.Parameters)
                {
                    uriString = uriString.Replace($"{{{kv.Key}}}", kv.Value);
                }

                restPipe.Config.HttpRequestMessage = new HttpRequestMessage(restPipe.Config.HttpMethod, new Uri(uriString));

                var mediaTye = restPipe.Config.MimeType.AsText;
                var body     = restPipe.Config.Body;
                if (body != null)
                {
                    if (RestMimeTypeConvertJson.Contains(mediaTye))
                    {
                        restPipe.Config.HttpRequestMessage.Content = new StringContent(JsonConvert.SerializeObject(body),
                                                                                       restPipe.Config.Encoding,
                                                                                       restPipe.Config.MimeType.AsText);
                    }
                    else if (RestMimeTypeConvertText.Contains(mediaTye))
                    {
                        restPipe.Config.HttpRequestMessage.Content = new StringContent(body.ToString(),
                                                                                       restPipe.Config.Encoding,
                                                                                       restPipe.Config.MimeType.AsText);
                    }
                    else if (RestMimeTypeConvertRaw.Contains(mediaTye))
                    {
                        if (typeof(byte[]).GetTypeInfo().IsAssignableFrom(body.GetType()))
                        {
                            restPipe.Config.HttpRequestMessage.Content = new ByteArrayContent((byte[])body);
                        }
                        else if (typeof(Stream).GetTypeInfo().IsAssignableFrom(body.GetType()))
                        {
                            restPipe.Config.HttpRequestMessage.Content = new StreamContent((Stream)body);
                        }
                    }
                    else
                    {
                    }
                }

                foreach (var kv in restPipe.Config.Headers)
                {
                    restPipe.Config.HttpRequestMessage.Headers.Add(kv.Key, kv.Value);
                }

                restPipe.Config.CancellationTokenSource = new CancellationTokenSource();

                restPipe.Config.BeforeExecute?.Invoke(restPipe);

                restPipe.Config.HttpResponseMessage = await restPipe.Config.HttpClient.SendAsync(restPipe.Config.HttpRequestMessage,
                                                                                                 restPipe.Config.CancellationTokenSource.Token).ConfigureAwait(false);
            }
            catch (Exception ex)
            {
                restPipe.Config.Exception = ex;
                restPipe.Config.OnException?.Invoke(restPipe, ex);
            }
            return(new RestPipeResponse(restPipe));
        }
Example #12
0
 /// <summary>
 /// Befores the execute.
 /// </summary>
 /// <returns>The execute.</returns>
 /// <param name="restPipe">Rest pipe.</param>
 /// <param name="afterPrepare">After prepare.</param>
 public static RestPipeRequest BeforeExecute(this RestPipeRequest restPipe, Action <RestPipeRequest> afterPrepare)
 {
     return(restPipe.Pipe(p => p.Config.BeforeExecute = afterPrepare));
 }
Example #13
0
 /// <summary>
 /// Adds an object as json to the body
 /// </summary>
 /// <returns>The as json.</returns>
 /// <param name="restPipe">Rest pipe.</param>
 /// <param name="body">Body.</param>
 public static RestPipeRequest BodyAsJson(this RestPipeRequest restPipe, object body)
 {
     return(BodyAsMimeType(restPipe, JsonConvert.SerializeObject(body), RestMimeType.ApplicationJson));
 }
Example #14
0
 /// <summary>
 /// Bodies as text.
 /// </summary>
 /// <returns>The as text.</returns>
 /// <param name="restPipe">Rest pipe.</param>
 /// <param name="text">Text.</param>
 public static RestPipeRequest BodyAsTextPlain(this RestPipeRequest restPipe, string text)
 {
     return(BodyAsMimeType(restPipe, text, RestMimeType.TextPlain));
 }
Example #15
0
 /// <summary>
 /// Cokis the container.
 /// </summary>
 /// <returns>The container.</returns>
 /// <param name="restPipe">Rest pipe.</param>
 /// <param name="cookieContainer">Cookie container.</param>
 public static RestPipeRequest CookieContainer(this RestPipeRequest restPipe, CookieContainer cookieContainer)
 {
     return(restPipe.Pipe((p) => p.Config.CookieContainer = cookieContainer));
 }
Example #16
0
 /// <summary>
 /// Initializes a new instance of the <see cref="T:EifelMono.Rest.RestPipeResponse"/> class.
 /// </summary>
 /// <param name="restPipe">Rest pipe.</param>
 public RestPipeResponse(RestPipeRequest restPipe) : base(restPipe)
 {
 }
Example #17
0
 /// <summary>
 /// Use the specified restPipe.
 /// </summary>
 /// <returns>The use.</returns>
 /// <param name="restPipe">Rest pipe.</param>
 public static RestPipeRequest Use(RestPipeRequest restPipe)
 {
     return(new RestPipeRequest().Pipe(p => p.Config.HttpClient = restPipe.Config.HttpClient));
 }