曾经和一个数据量比较大(日订单量峰值达到50000+)的客户做系统对接。开始时把接收的内容写在Controller方法的参数对象里头,在本地测试时,一直都很顺利。当与客户做联调测试,接收对方发送过来的内容时,时而成功,时而失败,为此还与对方IT好一番争论。但谁让客户是上帝呢,山穷水复疑无路,柳暗花明又一村。为此,我在Controller的基类里做了一个通用的函数用于捕捉客户端推送过来的内容,再解析为所需要的对象类型。虽然哆嗦点,但目前为止,运行状态良好。
上代码:
protected const string REQ_CONTENT = "content";
protected async Task<MyDictionary> GetRequestAsync(HttpRequest request)
{
var result = new MyDictionary();
var data = string.Empty;
try
{
request.HttpContext.Request.EnableBuffering();
var stream = new StreamReader(request.HttpContext.Request.Body);
data = await stream.ReadToEndAsync();
request.HttpContext.Request.Body.Seek(0, SeekOrigin.Begin);
}
catch (Exception ex)
{
data = ex.Message;
//logger.Error($"Readed request data failed.Error message:{ex.Message}.");
}
if (!string.IsNullOrWhiteSpace(data))
{
result.Add(REQ_CONTENT, data);
}
else
{
result.Add(REQ_CONTENT, "");
}
return result;
}
实属班门弄斧不自量,权作抛砖引玉撩一笑。