Ejemplo n.º 1
0
        void ApiRequest <T>(string endpoint, Action <RestRequest> arguments, Action <T> onSuccess, Action <string> onError)
        {
            var client  = new RestClient(GhostVREndpoint);
            var request = new RestRequest(endpoint, Method.POST);

            if (Token.HasValue)
            {
                request.AddHeader("Authorization", "Bearer " + Token.Value);
            }
            arguments(request);
            logger.Info($"API request: {endpoint} {request} token={(Token.HasValue ? Token.Value.ToString() : "(none)")}");

            client.ExecuteAsync(request, (response, request_) =>
            {
                try
                {
                    if (response.ErrorException != null)
                    {
                        logger.Error("Cannot connect to GhostVR API: " + response.ErrorMessage);
                        onError("Cannot connect to GhostVR API: " + response.ErrorMessage);
                        potentialAuthError = true;
                        return;
                    }

                    ApiResponse apiResponse = JsonConvert.DeserializeObject <ApiResponse>(response.Content);
                    if (apiResponse.status == ApiResponse.ApiStatus.success)
                    {
                        ApiResponseSuccess <T> apiResponseSuccess = JsonConvert.DeserializeObject <ApiResponseSuccess <T> >(response.Content);
                        logger.Info("ApiRequest success: " + endpoint);
                        onSuccess(apiResponseSuccess.data);
                    }
                    else
                    {
                        ApiResponseError apiResponseError = JsonConvert.DeserializeObject <ApiResponseError>(response.Content);
                        logger.Error($"ApiRequest error: {endpoint}, {apiResponseError.status} {apiResponseError.message} ({apiResponseError.code})");
                        onError($"{apiResponseError.status} {apiResponseError.message} ({apiResponseError.code})");
                        potentialAuthError = true;
                    }
                }
                catch (Exception e)
                {
                    logger.Error("ApiRequest parse error:" + endpoint + e);
                    onError("an exception occurred: " + e);
                    potentialAuthError = true;
                }
            });
        }
Ejemplo n.º 2
0
        private async Task <T> GetAsync <T>(string url)
        {
            HttpResponseMessage response = await client.GetAsync(url);

            if (response.IsSuccessStatusCode)
            {
                ApiResponseSuccess <T> responseData = await response.Content.ReadAsAsync <ApiResponseSuccess <T> >();

                return(responseData.Data);
            }
            else
            {
                ApiResponseFail responseData = await response.Content.ReadAsAsync <ApiResponseFail>();

                throw new ClientHttpException(responseData.Message, response);
            }
        }
Ejemplo n.º 3
0
        //OnActionExecuting – 在執行 Action 之前執行
        //OnActionExecuted – 在執行 Action 之後執行
        //OnResultExecuting – 在執行 Action Result 之前執行
        //OnResultExecuted – 在執行 Action Result 之後執行

        public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
        {
            //過去不指定回傳格式
            if (actionExecutedContext.ActionContext.ActionDescriptor.GetCustomAttributes <NoPara>().Any())
            {
                return;
            }

            base.OnActionExecuted(actionExecutedContext);

            if (actionExecutedContext.Exception != null)
            {
                return;
            }
            var data = actionExecutedContext.ActionContext.Response.Content.ReadAsAsync <object>().Result;

            if (actionExecutedContext.Response.StatusCode == HttpStatusCode.Forbidden &&
                data is List <ValidatorErrorResult> )
            {
                var fail = new ValidatorFailOutputModel()
                {
                    ApiVersion = "1.0.0",
                    Method     = string.Format("{0}.{1}", actionExecutedContext.Request.RequestUri.AbsolutePath, actionExecutedContext.Request.Method),
                    Status     = "ERROR",
                    Error      = data,
                    Id         = Guid.NewGuid(),
                };
                actionExecutedContext.Response = actionExecutedContext.Request.CreateResponse(fail);
            }
            else
            {
                var result = new ApiResponseSuccess
                {
                    apiVersion = "1.0.0",
                    status     = "SUCCESS",
                    method     = $"{ actionExecutedContext.Request.RequestUri.AbsolutePath }.{ actionExecutedContext.Request.Method }",
                    id         = Guid.NewGuid(),
                    //StatusCode = actionExecutedContext.ActionContext.Response.StatusCode,
                    data = data
                };

                // 重新封裝回傳格式
                //actionExecutedContext.Response = actionExecutedContext.Request.CreateResponse(result.StatusCode, result);
                actionExecutedContext.Response = actionExecutedContext.Request.CreateResponse(result);
            }
        }