removed flurl and made a request creator

This commit is contained in:
TomPallister
2016-10-07 12:54:50 +01:00
parent 74a7f5d270
commit 8688c1eb6f
11 changed files with 289 additions and 591 deletions

View File

@ -1,210 +0,0 @@
namespace Ocelot.Library.Infrastructure.HttpClient
{
using System;
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading;
using System.Threading.Tasks;
public class HttpClientWrapper : IHttpClient
{
private readonly HttpClient _httpClient;
public HttpClientWrapper(HttpClient httpClient)
{
_httpClient = httpClient;
}
public void Dispose()
{
_httpClient.Dispose();
}
public Uri BaseAddress
{
get { return _httpClient.BaseAddress; }
set { _httpClient.BaseAddress = value; }
}
public HttpRequestHeaders DefaultRequestHeaders
{
get { return _httpClient.DefaultRequestHeaders; }
}
public long MaxResponseContentBufferSize
{
get { return _httpClient.MaxResponseContentBufferSize; }
set { _httpClient.MaxResponseContentBufferSize = value; }
}
public TimeSpan Timeout
{
get { return _httpClient.Timeout; }
set { _httpClient.Timeout = value; }
}
public void CancelPendingRequests()
{
_httpClient.CancelPendingRequests();
}
public async Task<HttpResponseMessage> DeleteAsync(string requestUri)
{
return await _httpClient.DeleteAsync(requestUri);
}
public async Task<HttpResponseMessage> DeleteAsync(Uri requestUri)
{
return await _httpClient.DeleteAsync(requestUri);
}
public async Task<HttpResponseMessage> DeleteAsync(Uri requestUri, CancellationToken cancellationToken)
{
return await _httpClient.DeleteAsync(requestUri, cancellationToken);
}
public async Task<HttpResponseMessage> DeleteAsync(string requestUri, CancellationToken cancellationToken)
{
return await _httpClient.DeleteAsync(requestUri, cancellationToken);
}
public async Task<HttpResponseMessage> GetAsync(string requestUri)
{
return await _httpClient.GetAsync(requestUri);
}
public async Task<HttpResponseMessage> GetAsync(Uri requestUri)
{
return await _httpClient.GetAsync(requestUri);
}
public async Task<HttpResponseMessage> GetAsync(string requestUri, HttpCompletionOption completionOption)
{
return await _httpClient.GetAsync(requestUri, completionOption);
}
public async Task<HttpResponseMessage> GetAsync(string requestUri, CancellationToken cancellationToken)
{
return await _httpClient.GetAsync(requestUri, cancellationToken);
}
public async Task<HttpResponseMessage> GetAsync(Uri requestUri, HttpCompletionOption completionOption)
{
return await _httpClient.GetAsync(requestUri, completionOption);
}
public async Task<HttpResponseMessage> GetAsync(Uri requestUri, CancellationToken cancellationToken)
{
return await _httpClient.GetAsync(requestUri, cancellationToken);
}
public async Task<HttpResponseMessage> GetAsync(string requestUri, HttpCompletionOption completionOption, CancellationToken cancellationToken)
{
return await _httpClient.GetAsync(requestUri, completionOption, cancellationToken);
}
public async Task<HttpResponseMessage> GetAsync(Uri requestUri, HttpCompletionOption completionOption, CancellationToken cancellationToken)
{
return await _httpClient.GetAsync(requestUri, completionOption, cancellationToken);
}
public async Task<byte[]> GetByteArrayAsync(string requestUri)
{
return await _httpClient.GetByteArrayAsync(requestUri);
}
public async Task<byte[]> GetByteArrayAsync(Uri requestUri)
{
return await _httpClient.GetByteArrayAsync(requestUri);
}
public async Task<Stream> GetStreamAsync(string requestUri)
{
return await _httpClient.GetStreamAsync(requestUri);
}
public async Task<Stream> GetStreamAsync(Uri requestUri)
{
return await _httpClient.GetStreamAsync(requestUri);
}
public async Task<string> GetStringAsync(string requestUri)
{
return await _httpClient.GetStringAsync(requestUri);
}
public async Task<string> GetStringAsync(Uri requestUri)
{
return await _httpClient.GetStringAsync(requestUri);
}
public async Task<HttpResponseMessage> PostAsync(string requestUri, HttpContent content)
{
return await _httpClient.PostAsync(requestUri, content);
}
public async Task<HttpResponseMessage> PostAsync(Uri requestUri, HttpContent content)
{
return await _httpClient.PostAsync(requestUri, content);
}
public async Task<HttpResponseMessage> PostAsync(string requestUri, HttpContent content, CancellationToken cancellationToken)
{
return await _httpClient.PostAsync(requestUri, content, cancellationToken);
}
public async Task<HttpResponseMessage> PostAsync(Uri requestUri, HttpContent content, CancellationToken cancellationToken)
{
return await _httpClient.PostAsync(requestUri, content, cancellationToken);
}
public async Task<HttpResponseMessage> PutAsync(string requestUri, HttpContent content)
{
return await _httpClient.PutAsync(requestUri, content);
}
public async Task<HttpResponseMessage> PutAsync(Uri requestUri, HttpContent content)
{
return await _httpClient.PutAsync(requestUri, content);
}
public async Task<HttpResponseMessage> PutAsync(string requestUri, HttpContent content, CancellationToken cancellationToken)
{
return await _httpClient.PutAsync(requestUri, content, cancellationToken);
}
public async Task<HttpResponseMessage> PutAsync(Uri requestUri, HttpContent content, CancellationToken cancellationToken)
{
return await _httpClient.PutAsync(requestUri, content, cancellationToken);
}
public async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request)
{
return await _httpClient.SendAsync(request);
}
public async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, HttpCompletionOption completionOption)
{
return await _httpClient.SendAsync(request, completionOption);
}
public async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
return await _httpClient.SendAsync(request, cancellationToken);
}
public async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationToken cancellationToken)
{
return await _httpClient.SendAsync(request, completionOption, cancellationToken);
}
public void Dispose(bool disposing)
{
if (!disposing)
{
_httpClient.Dispose();
}
}
}
}

View File

@ -1,49 +0,0 @@
namespace Ocelot.Library.Infrastructure.HttpClient
{
using System;
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading;
using System.Threading.Tasks;
public interface IHttpClient
{
Uri BaseAddress { get; set; }
HttpRequestHeaders DefaultRequestHeaders { get; }
long MaxResponseContentBufferSize { get; set; }
TimeSpan Timeout { get; set; }
void CancelPendingRequests();
Task<HttpResponseMessage> DeleteAsync(string requestUri);
Task<HttpResponseMessage> DeleteAsync(Uri requestUri);
Task<HttpResponseMessage> DeleteAsync(Uri requestUri, CancellationToken cancellationToken);
Task<HttpResponseMessage> DeleteAsync(string requestUri, CancellationToken cancellationToken);
Task<HttpResponseMessage> GetAsync(string requestUri);
Task<HttpResponseMessage> GetAsync(Uri requestUri);
Task<HttpResponseMessage> GetAsync(string requestUri, HttpCompletionOption completionOption);
Task<HttpResponseMessage> GetAsync(string requestUri, CancellationToken cancellationToken);
Task<HttpResponseMessage> GetAsync(Uri requestUri, HttpCompletionOption completionOption);
Task<HttpResponseMessage> GetAsync(Uri requestUri, CancellationToken cancellationToken);
Task<HttpResponseMessage> GetAsync(string requestUri, HttpCompletionOption completionOption, CancellationToken cancellationToken);
Task<HttpResponseMessage> GetAsync(Uri requestUri, HttpCompletionOption completionOption, CancellationToken cancellationToken);
Task<byte[]> GetByteArrayAsync(string requestUri);
Task<byte[]> GetByteArrayAsync(Uri requestUri);
Task<Stream> GetStreamAsync(string requestUri);
Task<Stream> GetStreamAsync(Uri requestUri);
Task<string> GetStringAsync(string requestUri);
Task<string> GetStringAsync(Uri requestUri);
Task<HttpResponseMessage> PostAsync(string requestUri, HttpContent content);
Task<HttpResponseMessage> PostAsync(Uri requestUri, HttpContent content);
Task<HttpResponseMessage> PostAsync(string requestUri, HttpContent content, CancellationToken cancellationToken);
Task<HttpResponseMessage> PostAsync(Uri requestUri, HttpContent content, CancellationToken cancellationToken);
Task<HttpResponseMessage> PutAsync(string requestUri, HttpContent content);
Task<HttpResponseMessage> PutAsync(Uri requestUri, HttpContent content);
Task<HttpResponseMessage> PutAsync(string requestUri, HttpContent content, CancellationToken cancellationToken);
Task<HttpResponseMessage> PutAsync(Uri requestUri, HttpContent content, CancellationToken cancellationToken);
Task<HttpResponseMessage> SendAsync(HttpRequestMessage request);
Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, HttpCompletionOption completionOption);
Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken);
Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationToken cancellationToken);
void Dispose(bool disposing);
}
}

View File

@ -1,17 +1,16 @@
namespace Ocelot.Library.Infrastructure.RequestBuilder
{
using System.IO;
using System.Net.Http;
using Microsoft.AspNetCore.Http;
using System.IO;
using Microsoft.AspNetCore.Http;
namespace Ocelot.Library.Infrastructure.RequestBuilder
{
public interface IRequestBuilder
{
HttpRequestMessage Build(string httpMethod,
Request Build(string httpMethod,
string downstreamUrl,
Stream content,
IHeaderDictionary headers,
IRequestCookieCollection cookies,
IQueryCollection queryString,
string queryString,
string contentType);
}
}

View File

@ -0,0 +1,17 @@
using System.Net;
using System.Net.Http;
namespace Ocelot.Library.Infrastructure.RequestBuilder
{
public class Request
{
public Request(HttpRequestMessage httpRequestMessage, CookieContainer cookieContainer)
{
HttpRequestMessage = httpRequestMessage;
CookieContainer = cookieContainer;
}
public HttpRequestMessage HttpRequestMessage { get; private set; }
public CookieContainer CookieContainer { get; private set; }
}
}

View File

@ -1,24 +1,27 @@
namespace Ocelot.Library.Infrastructure.RequestBuilder
{
using System;
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using Microsoft.AspNetCore.Http;
using System;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using Microsoft.AspNetCore.Http;
namespace Ocelot.Library.Infrastructure.RequestBuilder
{
public class RequestBuilder : IRequestBuilder
{
public HttpRequestMessage Build(string httpMethod, string downstreamUrl, Stream content, IHeaderDictionary headers,
IRequestCookieCollection cookies, IQueryCollection queryString, string contentType)
public Request Build(string httpMethod, string downstreamUrl, Stream content, IHeaderDictionary headers,
IRequestCookieCollection cookies, string queryString, string contentType)
{
var method = new HttpMethod(httpMethod);
var uri = new Uri(downstreamUrl + queryString);
var uri = new Uri(string.Format("{0}{1}", downstreamUrl, queryString));
var httpRequestMessage = new HttpRequestMessage(method, uri)
var httpRequestMessage = new HttpRequestMessage(method, uri);
if (content != null)
{
Content = new StreamContent(content),
};
httpRequestMessage.Content = new StreamContent(content);
}
if (!string.IsNullOrEmpty(contentType))
{
@ -42,8 +45,19 @@
}
}
return httpRequestMessage;
var cookieContainer = new CookieContainer();
//todo get rid of if
if (cookies != null)
{
foreach (var cookie in cookies)
{
cookieContainer.Add(uri, new Cookie(cookie.Key, cookie.Value));
}
}
return new Request(httpRequestMessage, cookieContainer);
}
}
}

View File

@ -1,22 +1,18 @@
using System.Net.Http;
using System.Threading.Tasks;
using Ocelot.Library.Infrastructure.RequestBuilder;
namespace Ocelot.Library.Infrastructure.Requester
{
using HttpClient;
public class HttpClientHttpRequester : IHttpRequester
{
private readonly IHttpClient _httpClient;
public HttpClientHttpRequester(IHttpClient httpClient)
public async Task<HttpResponseMessage> GetResponse(Request request)
{
_httpClient = httpClient;
}
public async Task<HttpResponseMessage> GetResponse(HttpRequestMessage httpRequestMessage)
{
return await _httpClient.SendAsync(httpRequestMessage);
using (var handler = new HttpClientHandler { CookieContainer = request.CookieContainer })
using (var httpClient = new HttpClient(handler))
{
return await httpClient.SendAsync(request.HttpRequestMessage);
}
}
}
}

View File

@ -1,10 +1,11 @@
using System.Net.Http;
using System.Threading.Tasks;
using Ocelot.Library.Infrastructure.RequestBuilder;
namespace Ocelot.Library.Infrastructure.Requester
{
public interface IHttpRequester
{
Task<HttpResponseMessage> GetResponse(HttpRequestMessage httpRequestMessage);
Task<HttpResponseMessage> GetResponse(Request request);
}
}

View File

@ -41,7 +41,7 @@ namespace Ocelot.Library.Middleware
var request = _requestBuilder
.Build(context.Request.Method, downstreamUrl.Data, context.Request.Body,
context.Request.Headers, context.Request.Cookies, context.Request.Query, context.Request.ContentType);
context.Request.Headers, context.Request.Cookies, context.Request.QueryString.Value, context.Request.ContentType);
var response = await _requester
.GetResponse(request);