|
1 | | -using Microsoft.AspNetCore.WebUtilities; |
| 1 | +using Microsoft.AspNetCore.Routing.Template; |
| 2 | +using Microsoft.AspNetCore.WebUtilities; |
2 | 3 | using NetCoreStack.Contracts; |
3 | 4 | using NetCoreStack.Proxy.Extensions; |
4 | 5 | using NetCoreStack.Proxy.Internal; |
|
7 | 8 | using System.Collections.Generic; |
8 | 9 | using System.IO; |
9 | 10 | using System.Linq; |
| 11 | +using System.Net; |
10 | 12 | using System.Net.Http; |
11 | 13 | using System.Text; |
12 | 14 | using System.Threading.Tasks; |
@@ -48,10 +50,11 @@ protected virtual HttpContent CreateHttpContent(object value) |
48 | 50 | public async Task CreateRequestContentAsync(RequestContext requestContext, |
49 | 51 | HttpRequestMessage request, |
50 | 52 | ProxyMethodDescriptor descriptor, |
51 | | - UriBuilder uriBuilder) |
| 53 | + ProxyUriDefinition proxyUriDefinition) |
52 | 54 | { |
53 | 55 | await Task.CompletedTask; |
54 | 56 |
|
| 57 | + var uriBuilder = proxyUriDefinition.UriBuilder; |
55 | 58 | var argsDic = descriptor.Resolve(requestContext.Args); |
56 | 59 | var argsCount = argsDic.Count; |
57 | 60 | var keys = new List<string>(argsDic.Keys); |
@@ -87,6 +90,19 @@ public async Task CreateRequestContentAsync(RequestContext requestContext, |
87 | 90 | } |
88 | 91 | if (descriptor.HttpMethod == HttpMethod.Get || descriptor.HttpMethod == HttpMethod.Delete) |
89 | 92 | { |
| 93 | + if (descriptor.Template.HasValue()) |
| 94 | + { |
| 95 | + if (proxyUriDefinition.HasParameter) |
| 96 | + { |
| 97 | + for (int i = 0; i < proxyUriDefinition.ParameterParts.Count; i++) |
| 98 | + { |
| 99 | + var key = keys[i]; |
| 100 | + uriBuilder.Path += ($"/{WebUtility.UrlEncode(requestContext.Args[i]?.ToString())}"); |
| 101 | + argsDic.Remove(key); |
| 102 | + } |
| 103 | + } |
| 104 | + } |
| 105 | + |
90 | 106 | request.RequestUri = QueryStringResolver.Parse(uriBuilder, argsDic); |
91 | 107 | } |
92 | 108 | } |
|
0 commit comments