public class ApiHelper
{
/// <summary>
/// 调用api返回json
/// </summary>
/// <param name="url">api地址</param>
/// <param name="jsonstr">接收参数</param>
/// <param name="type">类型</param>
/// <param name="authorization">身份校验</param>
/// <returns></returns>
public static ResponseBean<T> HttpPost<T>(string url, string jsonstr ,string authorization = "") where T : class
{
ResponseBean<T> resultModel = null;
try
{
string webAddress = ConfigurationManager.AppSettings["WebApiAddress"]?.ToString();
Encoding encoding = Encoding.UTF8;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(webAddress + url);//webrequest请求api地址
request.Accept = "text/html,application/xhtml+xml,*/*";
request.ContentType = "application/json";
request.Method = "POST";
if (!string.IsNullOrEmpty(authorization))
{
request.Headers.Add("Authorization", authorization);
}
byte[] buffer = encoding.GetBytes(jsonstr);
request.ContentLength = buffer.Length;
request.GetRequestStream().Write(buffer, 0, buffer.Length);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
string result = reader.ReadToEnd();
resultModel = Common.StrToObject<ResponseBean<T>>(result);
if (resultModel != null)
{
// Header
if (response.Headers.AllKeys != null && response.Headers.AllKeys.ToList().Contains("Authorization"))
{
resultModel.Authorization = response.Headers.GetValues("Authorization")[0];
}
}
}
}
catch (Exception ex)
{
// 过期
if (ex.Message.Contains("(401) 未经授权"))
{
return new ResponseBean<T>() { code = Constant.UNAUTHORIZED_CODE, msg = ex.Message };
}
return new ResponseBean<T>() { code = Constant.REQUEST_ERROR_CODE, msg = "程序出错"};
}
return resultModel;
}
/// <summary>
/// GET方法
/// </summary>
/// <param name="url"></param>
/// <param name="getDataStr"></param>
/// <param name="authorization"></param>
/// <returns></returns>
public static ResponseBean<T> HttpGet<T>(string url, string paramStr, string authorization = "") where T : class
{
ResponseBean<T> resultModel = null;
try
{
string webAddress = ConfigurationManager.AppSettings["WebApiAddress"]?.ToString();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(webAddress + url + (paramStr == "" ? "" : "?") + paramStr);
request.Method = "GET";
request.ContentType = "text/html;charset=UTF-8";
if (!string.IsNullOrEmpty(authorization))
{
request.Headers.Add("Authorization", authorization);
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
string retString = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
resultModel = Common.StringToObject<ResponseBean<T>>(retString);
if (resultModel != null)
{
// Header
if (response.Headers.AllKeys != null && response.Headers.AllKeys.ToList().Contains("Authorization"))
{
resultModel.Authorization = response.Headers.GetValues("Authorization")[0];
}
}
}
catch (Exception ex)
{
// 过期
if (ex.Message.Contains("(401) 未经授权"))
{
return new ResponseBean<T>() { code = Constant.UNAUTHORIZED_CODE, msg = ex.Message };
}
return new ResponseBean<T>() { code = Constant.REQUEST_ERROR_CODE, msg = ex.Message };
}
return resultModel;
}
/// <summary>
/// GET Image方法
/// </summary>
/// <param name="url"></param>
/// <param name="getDataStr"></param>
/// <param name="authorization"></param>
/// <returns></returns>
public static Stream HttpGetImage(string url, string paramStr, string authorization = "")
{
try
{
string webAddress = ConfigurationManager.AppSettings["WebApiAddress"]?.ToString();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(webAddress + url + (paramStr == "" ? "" : "?") + paramStr);
request.Method = "GET";
request.ContentType = "text/html;charset=UTF-8";
if (!string.IsNullOrEmpty(authorization))
{
request.Headers.Add("Authorization", authorization);
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
//response.ContentType = "image/jpg";
Stream myResponseStream = response.GetResponseStream();
//myResponseStream.Close();
return myResponseStream;
}
catch (Exception ex)
{
return null;
}
}
/// <summary>
/// 上传图片
/// </summary>
/// <param name="url"></param>
/// <param name="postDataStr"></param>
/// <param name="authorization"></param>
/// <returns></returns>
public static ResponseBean<T> UploadImage<T>(string url, string filePath, string authorization = "") where T : class
{
ResponseBean<T> resultModel = null;
try
{
string webAddress = ConfigurationManager.AppSettings["WebApiAddress"]?.ToString();
// 调用接口上传文件
using (var client = new HttpClient())
{
using (var multipartFormDataContent = new MultipartFormDataContent())
{
//var values = new[]
//{
// new KeyValuePair<string, string>("a", "3"),
// new KeyValuePair<string, string>("c", "2"),
// new KeyValuePair<string, string>("d", "2")
// //other values
//};
//foreach (var keyValuePair in values)
//{
// multipartFormDataContent.Add(new StringContent(keyValuePair.Value),
// String.Format("\"{0}\"", keyValuePair.Key));
//}
client.DefaultRequestHeaders.Add("Authorization", authorization);
var fileContent = new ByteArrayContent(File.ReadAllBytes(filePath));
multipartFormDataContent.Add(fileContent,
"file",
new FileInfo(filePath).Name);
var html = client.PostAsync(webAddress + url, multipartFormDataContent).Result.Content.ReadAsStringAsync().Result;
resultModel = Common.StringToObject<ResponseBean<T>>(html);
}
}
}
catch (Exception ex)
{
// 过期
if (ex.Message.Contains("(401) 未经授权"))
{
return new ResponseBean<T>() { code = Constant.UNAUTHORIZED_CODE, msg = ex.Message };
}
return new ResponseBean<T>() { code = 500, msg = ex.Message };
}
return resultModel;
}
}
public class ResponseBean<T> where T : class
{
/// <summary>
/// HTTP状态码
/// </summary>
public int code { get; set; }
/// <summary>
/// 返回信息
/// </summary>
public string msg { get; set; }
/// <summary>
/// 返回的数据
/// </summary>
public T data { get; set; }
/// <summary>
/// 验证Token
/// </summary>
public string Authorization { get; set; }
}