重新调整 - 方法中的 ApiResponse<T> 包装无法访问内容



我正在使用改装,效果很好,但我也是新手。

我需要在一个调用中完成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之后返回。

最新更新