예제 #1
0
        ////////////////////////////////////////////////////////////////////////////////////////////////////
        /// <summary>   Serialize the data via ProtoBuf for an HTTP request </summary>
        /// <remarks>   Andre Beging, 10.11.2018. </remarks>
        /// <param name="parameter">    The parameter. </param>
        /// <returns>   A ByteArrayContent. </returns>
        ////////////////////////////////////////////////////////////////////////////////////////////////////
        private static ByteArrayContent SerializeForRequest(IApiRequestParameter parameter)
        {
            var byteArrayContent = new ByteArrayContent(parameter.ProtoSerialize());

            byteArrayContent.Headers.ContentType = new MediaTypeHeaderValue("application/x-protobuf");
            return(byteArrayContent);
        }
예제 #2
0
 ////////////////////////////////////////////////////////////////////////////////////////////////////
 /// <summary>   An IApiRequestParameter extension method that prototype serialize. </summary>
 /// <remarks>   Andre Beging, 10.11.2018. </remarks>
 /// <exception cref="SerializationException">   Thrown when a Serialization error condition
 ///                                             occurs. </exception>
 /// <param name="parameter">    The parameter to act on. </param>
 /// <returns>   A byte[]. </returns>
 ////////////////////////////////////////////////////////////////////////////////////////////////////
 public static byte[] ProtoSerialize(this IApiRequestParameter parameter)
 {
     if (null == parameter)
     {
         return(null);
     }
     try
     {
         using (var stream = new MemoryStream())
         {
             Serializer.Serialize(stream, parameter);
             return(stream.ToArray());
         }
     }
     catch (Exception e)
     {
         throw new SerializationException($"Error while serializing {parameter}: {e}");
     }
 }
예제 #3
0
        ////////////////////////////////////////////////////////////////////////////////////////////////////
        /// <summary>   Send a POST request to the API </summary>
        /// <remarks>   Andre Beging, 10.11.2018. </remarks>
        /// <typeparam name="T">    Generic type parameter (Response Parameter). </typeparam>
        /// <param name="client">           The client. </param>
        /// <param name="apiController">    The API controller. </param>
        /// <param name="methodName">       Name of the method. </param>
        /// <param name="parameter">        The parameter. </param>
        /// <returns>   An Request Parameter. </returns>
        ////////////////////////////////////////////////////////////////////////////////////////////////////
        public static T ApiControllerPost <T>(HttpClient client, string apiController, string methodName, IApiRequestParameter parameter) where T : class, IApiResponseParameter
        {
            var targetAddress = $"{apiController}/{methodName}";
            var response      = client.PostAsync(targetAddress, SerializeForRequest(parameter)).Result;

            if (!response.IsSuccessStatusCode)
            {
                return(null);
            }

            var rawBytes = response.Content.ReadAsByteArrayAsync().Result;

            return(rawBytes.ProtoDeserialize <T>());
        }