二进制流形式
发送数据
Byte[] data= GetGzipByte(json);
string url = "";
string result = PostUrl(url, data,EHeaderContentType.gzip);
接收数据
[HttpPost]
[Route("ReceiveBinaryFile")]
[Description("接收二进制文件")]
[SwaggerOperation(Summary = "接收二进制文件")]
public async Task<IActionResult> ReceiveBinaryFile()
{
if (Request.ContentType == "application/octet-stream")
{
using (StreamReader sr = new StreamReader(Request.Body))
{
var json = await sr.ReadToEndAsync();
List<DataObject> list = JsonConvert.DeserializeObject<List<DataObject>>(json);
return Ok("OK");
}
}
else
{
return BadRequest("请求头错误");
}
}
GZIP压缩文件流格式
发送数据
Byte[] data= GetGzipByte(json);
string url = "";
string result = PostUrl(url, data,EHeaderContentType.gzip);
生成压缩文件流
public byte[] GetGzipByte(string s)
{
byte [] data = Encoding.UTF8.GetBytes(s);
using (MemoryStream ms = new MemoryStream())
{
using (GZipStream gZip = new GZipStream(ms, CompressionMode.Compress))
{
gZip.Write(data, 0, data.Length);
}
return ms.ToArray();
}
}
接收数据
[HttpPost]
[Route("ReceiveGZipFile")]
[Description("接收GZIP文件")]
public async IAsyncEnumerable<string> ReceiveGZipFile()
{
if (Request.Headers.ContentType == "application/x-gzip")
{
using (MemoryStream ms = new MemoryStream())
{
await Request.Body.CopyToAsync(ms);
ms.Seek(0, SeekOrigin.Begin);
byte[] bytes = new byte[2];
ms.Read(bytes, 0, 2);
using (GZipStream gZip = new GZipStream(ms, CompressionMode.Decompress))
{
using (MemoryStream decompressStea = new MemoryStream())
{
await gZip.CopyToAsync(decompressStea);
decompressStea.Seek(0, SeekOrigin.Begin);
using (StreamReader reader = new StreamReader(decompressStea))
{
var json = await reader.ReadToEndAsync();
List<ContainerParamVo> List = JsonConvert.DeserializeObject<List<ContainerParamVo>>(json);
yield return "OK";
}
}
}
}
}
else
{
yield return "请求头错误";
}
}
附通用接口调用程序
public static string PostUrl(string url, object param, EHeaderContentType contentType = EHeaderContentType.json, string tokenName = "", string tokenValue = "")
{
string result = string.Empty;
int i = 0;
try
{
HttpClient client = new HttpClient();
client.Timeout = TimeSpan.FromSeconds(3000);
if (!string.IsNullOrEmpty(tokenName))
{
client.DefaultRequestHeaders.Add(tokenName, tokenValue);
}
HttpContent data = null;
switch (contentType)
{
case EHeaderContentType.json:
data = new StringContent(param.ToString(), Encoding.UTF8, "application/json");
break;
case EHeaderContentType.form_data:
data = param is HttpContent ? param as HttpContent : null;
break;
case EHeaderContentType.x_www_form_urlencoded:
data = new FormUrlEncodedContent((IEnumerable<KeyValuePair<string, string>>)param);
break;
case EHeaderContentType.binary:
data = new ByteArrayContent((byte[])param);
data.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");
break;
case EHeaderContentType.gzip:
data = new ByteArrayContent((byte[])param);
data.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/x-gzip");
break;
}
while (i < 3 && string.IsNullOrEmpty(result))
{
var response = client.PostAsync(url, data);
result = response.Result.Content.ReadAsStringAsync().Result;
i++;
}
}
catch (Exception ex)
{
logger.Error($"PostUrl 接口调用失败,url是{url},参数是\r\n{param}\r\n,报错信息是{ex.Message}," +
$"报错位置是\r\n{ex.StackTrace},报错详情是\r\n{ex.ToString()}!");
}
return result;
}