@@ -28,24 +28,58 @@ public static RequestDelegate Build(ApiRequestContext request)
2828 builder . Use ( next => async request =>
2929 {
3030 await HandleRequestAsync ( request ) . ConfigureAwait ( false ) ;
31+ return await next ( request ) . ConfigureAwait ( false ) ;
32+ } ) ;
33+
34+ // GlobalFilter.OnRequestAsync
35+ foreach ( var filter in request . HttpContext . HttpApiOptions . GlobalFilters )
36+ {
37+ builder . Use ( next => async request =>
38+ {
39+ await filter . OnRequestAsync ( request ) . ConfigureAwait ( false ) ; // 应该把 next 做为 OnRequestAsync 的参数,在OnRequestAsync里调用才正确
40+ return await next ( request ) . ConfigureAwait ( false ) ;
41+ } ) ;
42+ }
43+
44+ // FilterAttribute.OnRequestAsync
45+ foreach ( var filter in request . ActionDescriptor . FilterAttributes )
46+ {
47+ builder . Use ( next => async request =>
48+ {
49+ await filter . OnRequestAsync ( request ) . ConfigureAwait ( false ) ; // 应该把 next 做为 OnRequestAsync 的参数,在OnRequestAsync里调用才正确
50+ return await next ( request ) . ConfigureAwait ( false ) ;
51+ } ) ;
52+ }
53+
54+ builder . Use ( next => async request =>
55+ {
3156 var response = await next ( request ) . ConfigureAwait ( false ) ;
3257 await HandleResponseAsync ( response ) . ConfigureAwait ( false ) ;
3358
3459 // TODO 在这里释放 requestAbortedLinker 才正确
35-
3660 return response ;
3761 } ) ;
3862
39- // GlobalFilter
63+ // GlobalFilter.OnResponseAsync
4064 foreach ( var filter in request . HttpContext . HttpApiOptions . GlobalFilters )
4165 {
42- builder . Use ( filter . ExecuteAsync ) ;
66+ builder . Use ( next => async request =>
67+ {
68+ var response = await next ( request ) . ConfigureAwait ( false ) ;
69+ await filter . OnResponseAsync ( response ) . ConfigureAwait ( false ) ;
70+ return response ;
71+ } ) ;
4372 }
4473
45- // FilterAttribute
74+ // FilterAttribute.OnResponseAsync
4675 foreach ( var filter in request . ActionDescriptor . FilterAttributes )
4776 {
48- builder . Use ( filter . ExecuteAsync ) ;
77+ builder . Use ( next => async request =>
78+ {
79+ var response = await next ( request ) . ConfigureAwait ( false ) ;
80+ await filter . OnResponseAsync ( response ) . ConfigureAwait ( false ) ;
81+ return response ;
82+ } ) ;
4983 }
5084
5185 return builder . Build ( ) ;
0 commit comments