Skip to content

Commit c11bf2e

Browse files
committed
ApiParameterContext增加ParameterName属性;
ApiRequestContext增加TryGetArgument方法;
1 parent bd8ecc1 commit c11bf2e

File tree

10 files changed

+62
-16
lines changed

10 files changed

+62
-16
lines changed

WebApiClientCore.Extensions.JsonRpc/Internals/JsonRpcParameters.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public object ToJsonRpcParams(JsonRpcParamsStyle paramsStyle)
2222
}
2323
else
2424
{
25-
return this.ToDictionary(item => item.Parameter.Name, item => item.ParameterValue);
25+
return this.ToDictionary(item => item.ParameterName, item => item.ParameterValue);
2626
}
2727
}
2828
}

WebApiClientCore/ApiParameterContext.cs

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,31 +10,43 @@ namespace WebApiClientCore
1010
public class ApiParameterContext : ApiRequestContext
1111
{
1212
/// <summary>
13-
/// 参数索引
13+
/// 获取参数描述
1414
/// </summary>
15-
private readonly int index;
15+
public ApiParameterDescriptor Parameter { get; }
1616

1717
/// <summary>
18-
/// 获取参数描述
18+
/// 获取参数名
1919
/// </summary>
20-
public ApiParameterDescriptor Parameter => this.ApiAction.Parameters[index];
20+
public string ParameterName => this.Parameter.Name;
2121

2222
/// <summary>
2323
/// 获取参数值
2424
/// </summary>
25-
public object? ParameterValue => this.Arguments[index];
25+
public object? ParameterValue => this.Arguments[this.Parameter.Index];
26+
2627

2728
/// <summary>
2829
/// Api参数上下文
2930
/// </summary>
3031
/// <param name="context">上下文</param>
3132
/// <param name="parameterIndex">参数索引</param>
3233
public ApiParameterContext(ApiRequestContext context, int parameterIndex)
34+
: this(context, context.ApiAction.Parameters[parameterIndex])
35+
{
36+
}
37+
38+
/// <summary>
39+
/// Api参数上下文
40+
/// </summary>
41+
/// <param name="context">上下文</param>
42+
/// <param name="parameter">参数描述</param>
43+
public ApiParameterContext(ApiRequestContext context, ApiParameterDescriptor parameter)
3344
: base(context.HttpContext, context.ApiAction, context.Arguments, context.Properties)
3445
{
35-
this.index = parameterIndex;
46+
this.Parameter = parameter;
3647
}
3748

49+
3850
/// <summary>
3951
/// 序列化参数值为utf8编码的Json
4052
/// </summary>
@@ -108,7 +120,7 @@ public IList<KeyValue> SerializeToKeyValues()
108120
return this.HttpContext
109121
.ServiceProvider
110122
.GetKeyValueSerializer()
111-
.Serialize(this.Parameter.Name, this.ParameterValue, options);
123+
.Serialize(this.ParameterName, this.ParameterValue, options);
112124
}
113125
}
114126
}

WebApiClientCore/ApiRequestContext.cs

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Net.Http;
1+
using System;
2+
using System.Net.Http;
23

34
namespace WebApiClientCore
45
{
@@ -53,6 +54,39 @@ protected ApiRequestContext(HttpContext httpContext, ApiActionDescriptor apiActi
5354
this.Properties = properties;
5455
}
5556

57+
/// <summary>
58+
/// 尝试根据参数名获取参数值
59+
/// </summary>
60+
/// <param name="parameterName">参数名</param>
61+
/// <param name="value">值</param>
62+
/// <returns></returns>
63+
public bool TryGetArgument(string parameterName, out object? value)
64+
{
65+
return this.TryGetArgument(parameterName, StringComparer.Ordinal, out value);
66+
}
67+
68+
/// <summary>
69+
/// 尝试根据参数名获取参数值
70+
/// </summary>
71+
/// <param name="parameterName">参数名</param>
72+
/// <param name="comparer">比较器</param>
73+
/// <param name="value">值</param>
74+
/// <returns></returns>
75+
public bool TryGetArgument(string parameterName, StringComparer comparer, out object? value)
76+
{
77+
for (var i = 0; i < this.ApiAction.Parameters.Count; i++)
78+
{
79+
if (comparer.Equals(parameterName, this.ApiAction.Parameters[i].Name))
80+
{
81+
value = this.Arguments[i];
82+
return true;
83+
}
84+
}
85+
86+
value = null;
87+
return false;
88+
}
89+
5690
/// <summary>
5791
/// 返回请求使用的HttpCompletionOption
5892
/// </summary>

WebApiClientCore/Attributes/FormDataTextAttribute.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public override Task OnRequestAsync(ApiRequestContext context)
6969
/// <returns></returns>
7070
public Task OnRequestAsync(ApiParameterContext context)
7171
{
72-
context.HttpContext.RequestMessage.AddFormDataText(context.Parameter.Name, context.ParameterValue?.ToString());
72+
context.HttpContext.RequestMessage.AddFormDataText(context.ParameterName, context.ParameterValue?.ToString());
7373
return Task.CompletedTask;
7474
}
7575
}

WebApiClientCore/Attributes/FormFieldAttribute.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public override async Task OnRequestAsync(ApiRequestContext context)
6868
/// <returns></returns>
6969
public async Task OnRequestAsync(ApiParameterContext context)
7070
{
71-
await context.HttpContext.RequestMessage.AddFormFieldAsync(context.Parameter.Name, context.ParameterValue?.ToString()).ConfigureAwait(false);
71+
await context.HttpContext.RequestMessage.AddFormFieldAsync(context.ParameterName, context.ParameterValue?.ToString()).ConfigureAwait(false);
7272
}
7373
}
7474
}

WebApiClientCore/Attributes/ParameterAttributes/JsonFormDataTextAttribute.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public class JsonFormDataTextAttribute : ApiParameterAttribute
1616
public sealed override Task OnRequestAsync(ApiParameterContext context)
1717
{
1818
var json = context.SerializeToJson();
19-
var fieldName = context.Parameter.Name;
19+
var fieldName = context.ParameterName;
2020
var fildValue = Encoding.UTF8.GetString(json);
2121
context.HttpContext.RequestMessage.AddFormDataText(fieldName, fildValue);
2222

WebApiClientCore/Attributes/ParameterAttributes/JsonFormFieldAttribute.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public class JsonFormFieldAttribute : ApiParameterAttribute
1616
public sealed override async Task OnRequestAsync(ApiParameterContext context)
1717
{
1818
var json = context.SerializeToJson();
19-
var fieldName = context.Parameter.Name;
19+
var fieldName = context.ParameterName;
2020
var fildValue = Encoding.UTF8.GetString(json);
2121
await context.HttpContext.RequestMessage.AddFormFieldAsync(fieldName, fildValue).ConfigureAwait(false);
2222
}

WebApiClientCore/Attributes/ParameterAttributes/UriAttribute.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public override Task OnRequestAsync(ApiParameterContext context)
2121
{
2222
if (context.ParameterValue == null)
2323
{
24-
throw new ArgumentNullException(context.Parameter.Name);
24+
throw new ArgumentNullException(context.ParameterName);
2525
}
2626

2727
if (context.Parameter.Index > 0)

WebApiClientCore/BuildInProxies/Invokers/ContextInvoker.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ private static InvokeDelegate<ApiRequestContext> BuildRequestHandler()
7676
{
7777
foreach (var parameter in context.ApiAction.Parameters)
7878
{
79-
var ctx = new ApiParameterContext(context, parameter.Index);
79+
var ctx = new ApiParameterContext(context, parameter);
8080
foreach (var attr in parameter.Attributes)
8181
{
8282
await attr.OnRequestAsync(ctx).ConfigureAwait(false);

WebApiClientCore/Parameters/FormDataFile.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ public FormDataFile(Func<Stream> streamFactory, string? fileName)
9494
public Task OnRequestAsync(ApiParameterContext context)
9595
{
9696
var stream = this.streamFactory();
97-
context.HttpContext.RequestMessage.AddFormDataFile(stream, context.Parameter.Name, this.EncodedFileName, this.ContentType);
97+
context.HttpContext.RequestMessage.AddFormDataFile(stream, context.ParameterName, this.EncodedFileName, this.ContentType);
9898
return Task.CompletedTask;
9999
}
100100

0 commit comments

Comments
 (0)