@@ -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
0 commit comments