internal Task <ApiResult <TResponse> > CallAsync <TRequest, TResponse>(string operation, TRequest request, System.Net.Http.HttpMethod method = null) where TResponse : Wlniao.Handler.IResponse, new() where TRequest : Wlniao.Handler.IRequest { if (request == null) { throw new ArgumentNullException(); } var ctx = new Context(); ctx.CorpId = CorpId; ctx.AppKey = AppKey; ctx.AppSecret = AppSecret; ctx.Method = method == null ? System.Net.Http.HttpMethod.Get : method; ctx.Operation = operation; ctx.Request = request; ctx.RequestHost = "https://oapi.dingtalk.com"; handler.HandleBefore(ctx); if (ctx.Response == null) { return(ctx.HttpTask.ContinueWith((t) => { handler.HandleAfter(ctx); if (ctx.Response is Error) { var err = (Error)ctx.Response; return new ApiResult <TResponse>() { success = false, message = err.errmsg, code = err.errcode.ToString() }; } return new ApiResult <TResponse>() { success = true, message = "success", data = (TResponse)ctx.Response }; })); } else { if (ctx.Response is Error) { var err = (Error)ctx.Response; return(Task <ApiResult <TResponse> > .Run(() => { return new ApiResult <TResponse>() { success = false, message = err.errmsg, code = err.errcode.ToString() }; })); } else { return(Task <ApiResult <TResponse> > .Run(() => { return new ApiResult <TResponse>() { success = true, message = "error", data = (TResponse)ctx.Response }; })); } } }