Как проверить размер содержимого необработанного запроса в Web API - PullRequest
0 голосов
/ 05 октября 2018

Я отправляю данные с мобильного устройства в веб-API.Почтовый запрос JSON содержит картинку, поэтому я преобразовал в base64string для публикации в Web API.Я конвертирую JSON в GZIP.Ниже приведен код, который я использую для отправки запроса с мобильного устройства в веб-API в XAMARIN FORM PCL

    var jsonPictures = JsonConvert.SerializeObject(dataOrderPictures);
    using (HttpClientHandler ClientHandler = new HttpClientHandler())
    using (HttpClient Client = new HttpClient(ClientHandler))
      {                             
        Client.DefaultRequestHeaders.AcceptEncoding.Add(new StringWithQualityHeaderValue("gzip"));
        var content = new StringContent(jsonPictures, Encoding.UTF8, "application/json");
        var result1 = await Client.PostAsync(uri, content);
        var enc = Encoding.UTF8;
        using (Stream responseStream = result1.Content.ReadAsStreamAsync().Result)
          {
           using (var decompressedStream = new GZipStream(responseStream, CompressionMode.Decompress))
          {
           using (var rd = new StreamReader(decompressedStream, enc))
             {
               pictureResult = rd.ReadToEnd();
             }
          }
     }

Ниже приведен код веб-API :

    [HttpPost]
    [CompressFilter]
    public HttpResponseMessage SavePictures1(int driverid, string pswd, JObject jsonResult)
    {
     var rawMessage = Request.Content.ReadAsByteArrayAsync();
    }

Класс CompressFilter:

public class CompressFilter : ActionFilterAttribute
    {

        public override void OnActionExecuted(HttpActionExecutedContext actContext)
        {
            var content = actContext.Response.Content;

            var bytes = content == null ? null : content.ReadAsByteArrayAsync().Result;
            var zlibbedContent = bytes == null ? new byte[0] :
            CompressionHelper.DeflateByte(bytes);
            actContext.Response.Content = new ByteArrayContent(zlibbedContent);
            actContext.Response.Content.Headers.Remove("Content-Type");
            actContext.Response.Content.Headers.Add("Content-encoding", "deflate");
            actContext.Response.Content.Headers.Add("Content-Type", "application/json");
            base.OnActionExecuted(actContext);
        }
    }



     public class CompressionHelper
        {
            public static byte[] DeflateByte(byte[] str)
            {
                if (str == null)
                { return null; }

                ErrorLog.WriteAPIRequest("", "Driver", Convert.ToString(str.Length), "SavePictures", "Test");


                using (var output = new MemoryStream())
                {
                    using (var compressor = new Ionic.Zlib.GZipStream( output, Ionic.Zlib.CompressionMode.Compress,Ionic.Zlib.CompressionLevel.BestSpeed))
                    {
                        compressor.Write(str, 0, str.Length);
                    }
                    return output.ToArray();
                }

            }
        }

Я хочу проверить длину содержимого запроса, которую я отправил с мобильного телефона.Как узнать длину содержимого в приведенном выше коде кода Web Api.Так что я могу проверить, работает ли GZip и в чем разница в реальном JSON и в GZIP.Надеюсь, что кто-то может помочь получить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...