我正在使用改装,效果很好,但我也是新手。
我需要在一个调用中完成ApiResponse(见下文(,因为在这个方法中我会做一些事情,比如
- 日志记录
- 处理异常
- 等等。。但我不能让它作为null工作
呼叫者
var response = await ExecuteAsync(() => webApiClient.GetStuff());
apiresponse为空的方法
public async Task<T> ExecAsync<T>(
Func<Task<T>> method) where T : class
{
T apiResponse = await method.Invoke();
ApiResponse<T> apiResponseOfT =apiResponse as ApiResponse<T>;//this is null
if (apiResponseOfT.IsSuccessStatusCode)
{
//do other stuff
return apiResponse;
}
else
{
//do some logging etc..
return apiResponse;
}
}
我做错了什么-为什么它是空的?是否可以只返回apiResponse.Content?
如何在ExecAsync中封装ApiResponse?
更新
请参阅下文以提供更多上下文。。。
[Get("/api/v1/customers")]
Task<ApiResponse<GetCustomerResponse>> GetCustomers();
public class GetCustomerResponse:ResponseBase
{
//various properties here...
}
public abstract class ResponseBase
{
public bool IsSuccess { get; set; }
}
ApiResponse<GetCustomerResponse> response = await ExecuteAsync(() => webApiClient.GetCustomers())
将声明更改为public async Task<ApiResponse<T>> ExecAsync<T>(Func<Task<ApiResponse<T>>> method) where T : class
并相应地更改实现即可
public async Task<ApiResponse<T>> ExecAsync<T>(
Func<Task<ApiResponse<T>>> method) where T : class
{
var apiResponseOfT = await method();
if (apiResponseOfT.IsSuccessStatusCode)
{
//do other stuff
return apiResponse;
}
else
{
//do some logging etc..
return apiResponse;
}
}
如果您不打算抛出任何异常,您可以在If-else之后返回。