1、Post 请求,反馈消息解析对象根据需要来创建实体类
public static async Task<Result> Post<T>(string url, string json, Action<string> addLogInfo = null)
{
if (!VertifyHttpURL(url, out _))
return new Result() { IsSuccess = false, Message = "Url格式设置不正确!" };
Result res = new Result();
//创建htttpContent对象,指定请求体中的json字符串
HttpContent content = new StringContent(json, Encoding.UTF8, "application/json");
try
{
//发送Post请求
HttpResponseMessage responseMsg = await client.PostAsync(url, content);
//确保请求成功
bool result = responseMsg.EnsureSuccessStatusCode().IsSuccessStatusCode;
if (result)
{
//读取响应内容
var val = await responseMsg.Content.ReadAsStringAsync();
if (addLogInfo != null)
addLogInfo($"Post上传数据:\n{json},\n收到反馈:\n{val}");
T msg = JSONHelper.JSONToEntityByNewton<T>(val);
if(msg is FeedbackMsg fb)
{
if (fb.Result != null)
{
res.IsSuccess = fb.Result.ToUpper() == "OK" ? true : false;
res.Message = "接收到Http服务器反馈信息:"+fb.Result + " " + fb.Msg;
}
else
{
res.IsSuccess = false;
res.Message = "Post上传数据返回错误";
}
}
else if( msg is NitrogenFBMsg nfb)
{
if (nfb != null && nfb.Data!=null)
{
res.IsSuccess = nfb.Code.ToUpper() == "200" && nfb.Data.Tres.ToUpper()=="OK" ? true : false;
res.Message = nfb.Data.Tres + " " + nfb.Data.TMsg;
}
else
{
res.IsSuccess = false;
res.Message = "Post上传数据返回错误";
}
}
}
else
{
res.IsSuccess = false;
res.Message = $"Post读取响应内容失败";
}
return res;
}
catch (Exception ex)
{
res.IsSuccess = false;
res.Message = $"Post请求上传数据{json}失败,原因:" + ex.Message;
return res;
}
}
2、验证url格式是否正确
public static bool VertifyHttpURL(string s, out Uri resultURI)
{
//if (!Regex.IsMatch(s, @"^https?:\/\/", RegexOptions.IgnoreCase))
// s = "http://" + s;
if (Uri.TryCreate(s, UriKind.Absolute, out resultURI))
return (resultURI.Scheme == Uri.UriSchemeHttp ||
resultURI.Scheme == Uri.UriSchemeHttps);
return false;
}