Exemplo n.º 1
0
        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
                        };
                    }));
                }
            }
        }