/// <summary> /// Validates action's parameters. /// Throws exception of failure, does nothing on success. /// </summary> /// <param name="action">IDynaliAction, request's action</param> protected void ValidateAction(IDynaliAction action) { List <string> validationErrors = action.GetValidationErrors(); if (validationErrors.Count > 0) { throw new ArgumentException("Invalid request parameters: " + string.Join(", ", validationErrors)); } }
/// <summary> /// Calls the Dynali's webservice asynchronously, sends action's parameters as json. /// </summary> /// <param name="action">IDynaliAction, request's action</param> /// <returns>string, JSON response</returns> protected async Task <string> CallAsync(IDynaliAction action) { ValidateAction(action); byte[] contentsBytes = UTF8Encoding.UTF8.GetBytes(action.ToJson()); WebRequest request = PrepareWebRequest(); (await request.GetRequestStreamAsync()).Write(contentsBytes, 0, contentsBytes.Length); Stream responseStream = (await request.GetResponseAsync()).GetResponseStream(); return(ReadResponse(responseStream)); }
/// <summary> /// Executes provided DynaliAction. /// </summary> /// <typeparam name="T">JsonResponse deriative</typeparam> /// <param name="action">Action details</param> /// <returns>JsonResponse deriative</returns> protected async Task <T> ExecuteActionAsync <T>(IDynaliAction action) where T : JsonResponse { return(JsonResponse.Parse <T>(await CallAsync(action))); }
/// <summary> /// Executes provided DynaliAction. /// </summary> /// <typeparam name="T">JsonResponse deriative</typeparam> /// <param name="action">Action details</param> /// <returns>JsonResponse deriative</returns> protected T ExecuteAction <T>(IDynaliAction action) where T : JsonResponse { return(JsonResponse.Parse <T>(Call(action))); }