mirror of
https://github.com/nsnail/Ocelot.git
synced 2025-06-19 09:18:16 +08:00
removed flurl and made a request creator
This commit is contained in:
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
17
src/Ocelot.Library/Infrastructure/RequestBuilder/Request.cs
Normal file
17
src/Ocelot.Library/Infrastructure/RequestBuilder/Request.cs
Normal 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; }
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -4,21 +4,18 @@ using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Ocelot.Library.Infrastructure.Configuration;
|
||||
using Ocelot.Library.Infrastructure.DownstreamRouteFinder;
|
||||
using Ocelot.Library.Infrastructure.Repository;
|
||||
using Ocelot.Library.Infrastructure.RequestBuilder;
|
||||
using Ocelot.Library.Infrastructure.Requester;
|
||||
using Ocelot.Library.Infrastructure.Responder;
|
||||
using Ocelot.Library.Infrastructure.UrlMatcher;
|
||||
using Ocelot.Library.Infrastructure.UrlTemplateReplacer;
|
||||
using Ocelot.Library.Middleware;
|
||||
|
||||
namespace Ocelot
|
||||
{
|
||||
using System.Net.Http;
|
||||
using Library.Infrastructure.Configuration;
|
||||
using Library.Infrastructure.HttpClient;
|
||||
using Library.Infrastructure.RequestBuilder;
|
||||
using Library.Infrastructure.UrlMatcher;
|
||||
using Library.Infrastructure.UrlTemplateReplacer;
|
||||
|
||||
public class Startup
|
||||
{
|
||||
public Startup(IHostingEnvironment env)
|
||||
@ -47,8 +44,6 @@ namespace Ocelot
|
||||
services.AddSingleton<IDownstreamRouteFinder, DownstreamRouteFinder>();
|
||||
services.AddSingleton<IHttpRequester, HttpClientHttpRequester>();
|
||||
services.AddSingleton<IHttpResponder, HttpContextResponder>();
|
||||
services.AddTransient<HttpClient>();
|
||||
services.AddTransient<IHttpClient, HttpClientWrapper>();
|
||||
services.AddSingleton<IRequestBuilder, RequestBuilder>();
|
||||
|
||||
// see this for why we register this as singleton http://stackoverflow.com/questions/37371264/invalidoperationexception-unable-to-resolve-service-for-type-microsoft-aspnetc
|
||||
|
Reference in New Issue
Block a user