Skip to content

Commit 4ac995f

Browse files
committed
JsonRpcContext->JsonRpcParameters
1 parent 176d9ed commit 4ac995f

File tree

4 files changed

+54
-74
lines changed

4 files changed

+54
-74
lines changed

WebApiClientCore.Extensions.JsonRpc/Attributes/JsonRpcMethodAttribute.cs

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,18 @@ public class JsonRpcMethodAttribute : HttpPostAttribute, IApiFilterAttribute
1313
/// </summary>
1414
private readonly string? method;
1515

16-
/// <summary>
17-
/// 获取或设置JsonRpc的参数风格
18-
/// 默认为JsonRpcParamsStyle.Array
19-
/// </summary>
20-
public JsonRpcParamsStyle ParamsStyle { get; set; } = JsonRpcParamsStyle.Array;
21-
2216
/// <summary>
2317
/// 获取或设置提交的Content-Type
2418
/// 默认为application/json-rpc
2519
/// </summary>
2620
public string ContentType { get; set; } = JsonRpcContent.MediaType;
2721

22+
/// <summary>
23+
/// 获取或设置JsonRpc的参数风格
24+
/// 默认为JsonRpcParamsStyle.Array
25+
/// </summary>
26+
public JsonRpcParamsStyle ParamsStyle { get; set; } = JsonRpcParamsStyle.Array;
27+
2828
/// <summary>
2929
/// 获取过滤器是否启用
3030
/// </summary>
@@ -65,14 +65,9 @@ public JsonRpcMethodAttribute(string? method, string? path)
6565
/// <returns></returns>
6666
public override Task OnRequestAsync(ApiRequestContext context)
6767
{
68-
var jsonRpcContext = new JsonRpcContext
69-
{
70-
MediaType = this.ContentType,
71-
Method = this.method ?? context.ApiAction.Name,
72-
ParamsStyle = this.ParamsStyle
73-
};
68+
var parametrs = new JsonRpcParameters();
69+
context.Properties.Set(typeof(JsonRpcParameters), parametrs);
7470

75-
context.Properties.Set(typeof(JsonRpcContext), jsonRpcContext);
7671
return base.OnRequestAsync(context);
7772
}
7873

@@ -83,7 +78,20 @@ public override Task OnRequestAsync(ApiRequestContext context)
8378
/// <returns></returns>
8479
Task IApiFilterAttribute.OnRequestAsync(ApiRequestContext context)
8580
{
86-
context.Properties.Get<JsonRpcContext>(typeof(JsonRpcContext)).SetHttpContent(context);
81+
var jsonRpcContent = new JsonRpcContent(this.ContentType);
82+
context.HttpContext.RequestMessage.Content = jsonRpcContent;
83+
84+
var parameters = context.Properties.Get<JsonRpcParameters>(typeof(JsonRpcParameters));
85+
var jsonRpcRequest = new JsonRpcRequest
86+
{
87+
Method = this.method ?? context.ApiAction.Name,
88+
Params = parameters.ToJsonRpcParams(this.ParamsStyle),
89+
};
90+
91+
var options = context.HttpContext.HttpApiOptions.JsonSerializeOptions;
92+
var jsonSerializer = context.HttpContext.ServiceProvider.GetJsonSerializer();
93+
jsonSerializer.Serialize(jsonRpcContent, jsonRpcRequest, options);
94+
8795
return Task.CompletedTask;
8896
}
8997

WebApiClientCore.Extensions.JsonRpc/Attributes/JsonRpcParamAttribute.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@ public class JsonRpcParamAttribute : ApiParameterAttribute
1616
/// <returns></returns>
1717
public override Task OnRequestAsync(ApiParameterContext context)
1818
{
19-
var jsonRpcContext = context.Properties.Get<JsonRpcContext>(typeof(JsonRpcContext));
20-
if (jsonRpcContext == null)
19+
var parameters = context.Properties.Get<JsonRpcParameters>(typeof(JsonRpcParameters));
20+
if (parameters == null)
2121
{
2222
throw new ApiInvalidConfigException($"请为接口方法{context.ApiAction.Name}修饰{nameof(JsonRpcMethodAttribute)}");
2323
}
2424

25-
jsonRpcContext.Parameters.Add(context);
25+
parameters.Add(context);
2626
return Task.CompletedTask;
2727
}
2828
}

WebApiClientCore.Extensions.JsonRpc/Internals/JsonRpcContext.cs

Lines changed: 0 additions & 57 deletions
This file was deleted.
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using System.Collections.Generic;
2+
using System.Linq;
3+
using WebApiClientCore.Attributes;
4+
5+
namespace WebApiClientCore.Extensions.JsonRpc
6+
{
7+
/// <summary>
8+
/// 表示JsonRpc参数
9+
/// </summary>
10+
class JsonRpcParameters : List<ApiParameterContext>
11+
{
12+
/// <summary>
13+
/// 转换为jsonRpc请求参数
14+
/// </summary>
15+
/// <param name="paramsStyle"></param>
16+
/// <returns></returns>
17+
public object ToJsonRpcParams(JsonRpcParamsStyle paramsStyle)
18+
{
19+
if (paramsStyle == JsonRpcParamsStyle.Array)
20+
{
21+
return this.Select(item => item.ParameterValue).ToArray();
22+
}
23+
else
24+
{
25+
return this.ToDictionary(item => item.Parameter.Name, item => item.ParameterValue);
26+
}
27+
}
28+
}
29+
}

0 commit comments

Comments
 (0)