C# webservice
需要添加 Newtonsoft.Json 的NuGet包
#region POST,一般向服务器发送数据
/// <summary>
/// POST,一般向服务器发送数据
/// </summary>
/// <param name="strUrl"></param>
/// <param name="data"></param>
/// <param name="contentType"></param>
/// <returns></returns>
private string ReadWebAPI_POST(string strUrl, string data, string contentType = "application/json;charset=utf-8")
{
try
{
Encoding encoding = Encoding.UTF8;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strUrl);//webrequest请求api地址
request.Method = "POST";//请求方式,GET或POST
//request.ContentType = "text/html;charset=UTF-8";//获取或设置 Content-type HTTP 标头的值。
request.ContentType = contentType;
request.ContentLength = 0;
if (!string.IsNullOrEmpty(data))
{
var byteData = Encoding.UTF8.GetBytes(data);
request.ContentLength = byteData.Length;//设置内容长度
var reqStream = request.GetRequestStream();
reqStream.Write(byteData, 0, byteData.Length);
reqStream.Close();
}
Stream myResponseStream;
try
{
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
myResponseStream = response.GetResponseStream();
}
catch (WebException ex)
{
return "Error";
}
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8);
string retString = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
if (request != null)
{
//关闭 HttpWebRequest
request.Abort();
}
System.GC.Collect();//垃圾回收
if (retString?.Length > 0)
{
return retString;
}
else
{
// SIE_LOG.SystemAPI.WriteLog(mDirecPath_Log + "\\ERROR", "调用读取WebApi的返回结果为空");
return null;
}
}
catch (Exception ex)
{
//SIE_LOG.SystemAPI.WriteLog(mDirecPath_Log + "\\ERROR", "调用读取WebApi异常:" + ex.Message + " || 堆栈:" + ex.StackTrace);
return null;
}
}
#endregion
#region 序列化
/// <summary>
/// 序列化
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public string ToJson(object obj)
{
return JsonConvert.SerializeObject(obj);
}
#endregion
上面是方法,下面是使用:
List<ShowData> ShowData_List = new List<ShowData>();
ShowData ShowData_Item = new ShowData
{
Key = "xxxx",
Value = "xxxx",
};
ShowData_List.Add(ShowData_Item);
ShowData_Item = new ShowData
{
Key = "xxxx",
Value = "xxxx",
};
ShowData_List.Add(ShowData_Item);
Transmission TransmissionItem = new Transmission
{
Num = "xxxx",
Type = "xxxx",
ShowData_List = ShowData_List,
ShowDataType = "xxxx",
};
string strValue = ReadWebAPI_POST(strUrl, ToJson(TransmissionItem));
if (string.IsNullOrEmpty(strValue) || strValue.Equals("Error"))
{
Console.WriteLine("请求异常!");
}
else
{
RequestParams model = JsonConvert.DeserializeObject<RequestParams>(strValue);//反序列化
if (model.IsSuccess)
{
Console.WriteLine($"接口调用成功!");
WLog.Write(strUrl + " " + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), "\r\n\r\n");
}
else
{
Console.WriteLine($"接口调用失败,异常信息为:【{model.Error.Message}】");
WLog.Write("InsDeviceState接口请求异常" + " " + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), "\r\n\r\n");
}
}
使用中:
Transmission的内容为:
public class Transmission
{
public string Num { get; set; }
public string Type { get; set; }
public List<ShowData> ShowData_List { get; set; }
public string ShowDataType { get; set; }
}
public struct ShowData
{
public string Key { get; set; }
public string Value { get; set; }
}
RequestParams的内容为:
public class RequestParams
{
public string Timestamp { get; set; }
public bool IsSuccess { get; set; }
public ErrorInfo Error { get; set; }
}
public struct ErrorInfo
{
public string Message { get; set; }
public string InnerError { get; set; }
public int Code { get; set; }
}