【发布时间】:2019-02-15 17:08:16
【问题描述】:
我正在尝试使用动态代理构建一个动态 http 客户端来拦截调用并使用它创建一个 http 请求。
我遇到的问题是异步方法:
private Task<object> PostAsync(HttpClient client, string url, HttpRequestParameters parameters, Type returnType)
{
return Task.Run(async () =>
{
var requestContent = new StringContent(Serializer.Serialize(parameters.BodyParameters));
var httpResponse = await client.PostAsync(url, requestContent);
var responseContent = await httpResponse.Content.ReadAsStringAsync();
return Serializer.Deserialize(responseContent, returnType);
});
}
我的任务返回动态/对象,而不是拦截返回类型的 T。
我以为我可以这样使用它
var task = PostAsync(client, url, parameters, returnType);
invocation.ReturnValue = task;
由于将返回的任务是原始任务并且它仍然处于待处理状态,我认为它会起作用,但我得到的只是一个例外,即 Task 无法转换为我的类型的任务(在这种情况下是字符串)。
感谢大家的帮助
编辑: 我确实看到了Intercept async method,这就是我试图做的,但即使使用反射我也无法调用任务,我仍然遇到同样的异常。
【问题讨论】:
标签: c# generics task castle-dynamicproxy dynamic-proxy