Skip to content

Commit 6ea6afb

Browse files
committed
Add Request Filters support
1 parent f627e29 commit 6ea6afb

File tree

4 files changed

+64
-2
lines changed

4 files changed

+64
-2
lines changed

src/GeekLearning.RestKit.Core/ClientBase.cs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,12 @@
88
namespace GeekLearning.RestKit.Core
99
{
1010
public abstract class ClientBase<TOptions>
11-
where TOptions : class, new()
11+
where TOptions : class, IProvideRequestFilters, new()
1212
{
1313
private IMediaFormatterProvider mediaFormatterProvider;
1414

15-
public ClientBase(IOptions<TOptions> options, IMediaFormatterProvider mediaFormatterProvider)
15+
public ClientBase(IOptions<TOptions> options,
16+
IMediaFormatterProvider mediaFormatterProvider)
1617
{
1718
this.Options = options.Value;
1819
this.mediaFormatterProvider = mediaFormatterProvider;
@@ -30,6 +31,17 @@ protected Task<TTarget> TransformResponseAsync<TTarget>(HttpResponseMessage mess
3031
return mediaFormatter.TransformAsync<TTarget>(message.Content);
3132
}
3233

34+
protected HttpRequestMessage ApplyFilters(HttpRequestMessage requestMessage, params string[] securityDefinitions)
35+
{
36+
HttpRequestMessage finalMessage = requestMessage;
37+
foreach (var filter in this.Options.RequestFilters)
38+
{
39+
finalMessage = filter.Apply(requestMessage, securityDefinitions) ?? finalMessage;
40+
}
41+
42+
return finalMessage;
43+
}
44+
3345
protected HttpContent TransformRequestBody(object data, string mediaType)
3446
{
3547
IMediaFormatter mediaFormatter = this.mediaFormatterProvider.GetMediaFormatter(mediaType);
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Threading.Tasks;
5+
6+
namespace GeekLearning.RestKit.Core
7+
{
8+
public abstract class ClientOptionsBase : IProvideRequestFilters
9+
{
10+
private List<IRequestFilter> requestfilters = new List<IRequestFilter>();
11+
12+
public void AddFilter(IRequestFilter filter)
13+
{
14+
this.requestfilters.Add(filter);
15+
}
16+
17+
public IEnumerable<IRequestFilter> RequestFilters
18+
{
19+
get
20+
{
21+
return requestfilters;
22+
}
23+
}
24+
}
25+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Threading.Tasks;
5+
6+
namespace GeekLearning.RestKit.Core
7+
{
8+
public interface IProvideRequestFilters
9+
{
10+
IEnumerable<IRequestFilter> RequestFilters { get; }
11+
}
12+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Net.Http;
5+
using System.Threading.Tasks;
6+
7+
namespace GeekLearning.RestKit.Core
8+
{
9+
public interface IRequestFilter
10+
{
11+
HttpRequestMessage Apply(HttpRequestMessage requestMessage, string[] securityDefinitions);
12+
}
13+
}

0 commit comments

Comments
 (0)