Я отправляю данные с мобильного устройства в веб-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.Надеюсь, что кто-то может помочь получить это.