Skip to content

Commit

Permalink
IsMultipartFormData in RestRequest
Browse files Browse the repository at this point in the history
  • Loading branch information
o.nadymov committed May 27, 2024
1 parent 406c571 commit dfbd38b
Show file tree
Hide file tree
Showing 8 changed files with 45 additions and 18 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System.Net;
using System.Net.Http.Headers;
using System.Security.Authentication;

namespace Spoleto.RestClient.Authentication
{
Expand Down Expand Up @@ -53,7 +54,13 @@ public sealed override async Task Authenticate(IRestClient client, HttpRequestMe

public virtual Task<bool> IsExpired(HttpResponseMessage response) => Task.FromResult(response.StatusCode == HttpStatusCode.Unauthorized);

public void SetExpired() => _token = null;
public void SetExpired()
{
if (_token == null)
throw new AuthenticationException("Cannot authenticate and get an access token. Check the credentials.");

_token = null;
}

protected abstract Task<string> GetAuthenticationToken(IRestClient client);

Expand Down
6 changes: 3 additions & 3 deletions src/Spoleto.RestClient/Client/IRestClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
{
public interface IRestClient : IDisposable
{
JsonRestRequest<TObj> CreateJsonRestRequest<TObj>(string uri, HttpMethod httpMethod = HttpMethod.Get, TObj? content = null) where TObj : class;
JsonRestRequest<TObj> CreateJsonRestRequest<TObj>(string uri, HttpMethod httpMethod = HttpMethod.Get, bool isMultipartFormData = false, TObj? content = null) where TObj : class;

XmlRestRequest<TObj> CreateXmlRestRequest<TObj>(string uri, HttpMethod httpMethod = HttpMethod.Get, TObj? content = null) where TObj : class;
XmlRestRequest<TObj> CreateXmlRestRequest<TObj>(string uri, HttpMethod httpMethod = HttpMethod.Get, bool isMultipartFormData = false, TObj? content = null) where TObj : class;

BinaryRestRequest CreateBinaryRestRequest(string uri, HttpMethod httpMethod = HttpMethod.Get, byte[]? content = null);
BinaryRestRequest CreateBinaryRestRequest(string uri, HttpMethod httpMethod = HttpMethod.Get, bool isMultipartFormData = false, byte[]? content = null);

Task<TextRestResponse> ExecuteAsStringAsync(RestRequest request, CancellationToken cancellationToken = default);

Expand Down
6 changes: 3 additions & 3 deletions src/Spoleto.RestClient/Client/RestClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@ public RestClient(HttpClient httpClient, IAuthenticator? authenticator = null, R
_disposeHttpClient = disposeHttpClient;
}

public virtual JsonRestRequest<TObj> CreateJsonRestRequest<TObj>(string uri, HttpMethod httpMethod = HttpMethod.Get, TObj? content = null) where TObj : class => new(uri, httpMethod, content);
public virtual JsonRestRequest<TObj> CreateJsonRestRequest<TObj>(string uri, HttpMethod httpMethod = HttpMethod.Get, bool isMultipartFormData = false, TObj? content = null) where TObj : class => new(uri, httpMethod, isMultipartFormData, content);

public virtual XmlRestRequest<TObj> CreateXmlRestRequest<TObj>(string uri, HttpMethod httpMethod = HttpMethod.Get, TObj? content = null) where TObj : class => new(uri, httpMethod, content);
public virtual XmlRestRequest<TObj> CreateXmlRestRequest<TObj>(string uri, HttpMethod httpMethod = HttpMethod.Get, bool isMultipartFormData = false, TObj? content = null) where TObj : class => new(uri, httpMethod, isMultipartFormData, content);

public virtual BinaryRestRequest CreateBinaryRestRequest(string uri, HttpMethod httpMethod = HttpMethod.Get, byte[]? content = null) => new(uri, httpMethod, content);
public virtual BinaryRestRequest CreateBinaryRestRequest(string uri, HttpMethod httpMethod = HttpMethod.Get, bool isMultipartFormData = false, byte[]? content = null) => new(uri, httpMethod, isMultipartFormData, content);

public async Task<TextRestResponse> ExecuteAsStringAsync(RestRequest request, CancellationToken cancellationToken = default)
{
Expand Down
11 changes: 8 additions & 3 deletions src/Spoleto.RestClient/RestRequest/BinaryRestRequest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,23 @@ namespace Spoleto.RestClient
{
public record BinaryRestRequest : RestRequest<byte[]>, IBinaryRestRequest
{
public BinaryRestRequest(string uri, HttpMethod httpMethod = HttpMethod.Get, byte[]? content = null)
: base(uri, httpMethod, content)
public BinaryRestRequest(string uri, HttpMethod httpMethod = HttpMethod.Get, bool isMultipartFormData = false, byte[]? content = null)
: base(uri, httpMethod, isMultipartFormData, content)
{
}

protected override string GetContentType() => ContentTypes.ApplicationOctetStream;

public override HttpContent GetHttpContent()
{
var content = new ByteArrayContent(Content);
HttpContent content = new ByteArrayContent(Content);

Check warning on line 17 in src/Spoleto.RestClient/RestRequest/BinaryRestRequest.cs

View workflow job for this annotation

GitHub Actions / build

Possible null reference argument for parameter 'content' in 'ByteArrayContent.ByteArrayContent(byte[] content)'.
content.Headers.ContentType = MediaTypeHeaderValue.Parse(ContentType);

if (IsMultipartFormData)
{
content = new MultipartFormDataContent { { content } };
}

return content;
}
}
Expand Down
2 changes: 2 additions & 0 deletions src/Spoleto.RestClient/RestRequest/IRestRequest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ namespace Spoleto.RestClient
public interface IRestRequest
{
HttpMethod HttpMethod { get; }

bool IsMultipartFormData { get; }

string Uri { get; }

Expand Down
11 changes: 8 additions & 3 deletions src/Spoleto.RestClient/RestRequest/JsonRestRequest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,21 @@ namespace Spoleto.RestClient
{
public record JsonRestRequest<TObj> : RestRequest<string>, IJsonRestRequest where TObj : class
{
public JsonRestRequest(string uri, HttpMethod httpMethod = HttpMethod.Get, TObj? obj = null)
: base(uri, httpMethod, SerializationManager.Serialize(SerializationManager.DataFomat.Json, obj))
public JsonRestRequest(string uri, HttpMethod httpMethod = HttpMethod.Get, bool isMultipartFormData = false, TObj? obj = null)
: base(uri, httpMethod, isMultipartFormData, SerializationManager.Serialize(SerializationManager.DataFomat.Json, obj))
{
}

protected override string GetContentType() => ContentTypes.ApplicationJson;

public override HttpContent GetHttpContent()
{
var content = new StringContent(Content, Encoding, ContentType);
HttpContent content = new StringContent(Content, Encoding, ContentType);

Check warning on line 18 in src/Spoleto.RestClient/RestRequest/JsonRestRequest.cs

View workflow job for this annotation

GitHub Actions / build

Possible null reference argument for parameter 'content' in 'StringContent.StringContent(string content, Encoding? encoding, string mediaType)'.

if (IsMultipartFormData)
{
content = new MultipartFormDataContent { { content } };
}

return content;
}
Expand Down
7 changes: 5 additions & 2 deletions src/Spoleto.RestClient/RestRequest/RestRequest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,20 @@ namespace Spoleto.RestClient
{
public abstract record RestRequest : IRestRequest
{
protected RestRequest(string uri, HttpMethod httpMethod = HttpMethod.Get)
protected RestRequest(string uri, HttpMethod httpMethod = HttpMethod.Get, bool isMultipartFormData = false)
{
Uri = uri;
HttpMethod = httpMethod;
IsMultipartFormData = isMultipartFormData;
ContentType = GetContentType();
}

public string Uri { get; }

public HttpMethod HttpMethod { get; }

public bool IsMultipartFormData { get; }

public string ContentType { get; set; }

public virtual Encoding Encoding { get; set; } = Encoding.UTF8;
Expand All @@ -28,7 +31,7 @@ protected RestRequest(string uri, HttpMethod httpMethod = HttpMethod.Get)

public abstract record RestRequest<T> : RestRequest, IRestRequestGeneric<T> where T : class
{
protected RestRequest(string uri, HttpMethod httpMethod = HttpMethod.Get, T? content = null)
protected RestRequest(string uri, HttpMethod httpMethod = HttpMethod.Get,bool isMultipartFormData=false, T? content = null)
: base(uri, httpMethod)
{
Content = content;
Expand Down
11 changes: 8 additions & 3 deletions src/Spoleto.RestClient/RestRequest/XmlRestRequest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,21 @@ namespace Spoleto.RestClient
{
public record XmlRestRequest<TObj> : RestRequest<string>, IXmlRestRequest where TObj : class
{
public XmlRestRequest(string uri, HttpMethod httpMethod = HttpMethod.Get, TObj? obj = null)
: base(uri, httpMethod, SerializationManager.Serialize(SerializationManager.DataFomat.Xml, obj))
public XmlRestRequest(string uri, HttpMethod httpMethod = HttpMethod.Get, bool isMultipartFormData = false, TObj? obj = null)
: base(uri, httpMethod, isMultipartFormData, SerializationManager.Serialize(SerializationManager.DataFomat.Xml, obj))
{
}

protected override string GetContentType() => ContentTypes.ApplicationXml;

public override HttpContent GetHttpContent()
{
var content = new StringContent(Content, Encoding, ContentType);
HttpContent content = new StringContent(Content, Encoding, ContentType);

Check warning on line 16 in src/Spoleto.RestClient/RestRequest/XmlRestRequest.cs

View workflow job for this annotation

GitHub Actions / build

Possible null reference argument for parameter 'content' in 'StringContent.StringContent(string content, Encoding? encoding, string mediaType)'.

if (IsMultipartFormData)
{
content = new MultipartFormDataContent { { content } };
}

return content;
}
Expand Down

0 comments on commit dfbd38b

Please sign in to comment.