请问关于c的具体应用场景有哪些?
- 内容介绍
- 文章标签
- 相关推荐
本文共计755个文字,预计阅读时间需要4分钟。
javapublic class NewHttpClient2 { public enum BodyFormat { Formed, Json } public BodyFormat BodyType; public String Method; public Uri Uri; public Encoding ContentEncoding; public Dictionary Bodies; public Dictionary Headers;}
public class NewHttpClient2
{
public enum BodyFormat
{
Formed, Json
}
public BodyFormat BodyType;
public string Method;
public Uri Uri;
public Encoding ContentEncoding;
public Dictionary<string, object> Bodys;
public Dictionary<string, string> Headers;
public Dictionary<string, string> Querys;
public int Timeout;
private NewHttpClient2()
{
BodyType = BodyFormat.Formed;
Method = "GET";
ContentEncoding = Encoding.UTF8;
Bodys = new Dictionary<string, object>();
Headers = new Dictionary<string, string>();
Querys = new Dictionary<string, string>();
ServicePointManager.Expect100Continue = false;
Timeout = 60000;
}
public NewHttpClient2(string uri) : this()
{
Uri = new Uri(uri);
}
public HttpWebRequest HttpWebRequest;
public string UriWithQuery
{
get
{
return Uri + "?" + Util.ParseQueryString(Querys);
}
}
public JObject PostAction()
{
HttpWebRequest = (HttpWebRequest)WebRequest.Create(UriWithQuery);
HttpWebRequest.Method = Method;
HttpWebRequest.ReadWriteTimeout = 30000;
foreach (var header in Headers)
{
HttpWebRequest.Headers.Add(header.Key, header.Value);
}
byte[] body = null;
switch (BodyType)
{
case BodyFormat.Formed:
{
var bodydata = Bodys.Select(pair => pair.Key + "=" + Util.UriEncode(pair.Value.ToString()))
.DefaultIfEmpty("")
.Aggregate((a, b) => a + "&" + b);
body = ContentEncoding.GetBytes(bodydata);
HttpWebRequest.ContentType = "application/x-www-form-urlencoded";
break;
}
case BodyFormat.Json:
{
var bodydata = JsonConvert.SerializeObject(Bodys);
body = ContentEncoding.GetBytes(bodydata);
HttpWebRequest.ContentType = "application/json";
break;
}
}
if (body != null && Bodys.Count > 0)
{
var stream = HttpWebRequest.GetRequestStream();
stream.Write(body, 0, body.Length);
stream.Close();
}
HttpWebResponse webresp;
try
{
webresp = (HttpWebResponse)HttpWebRequest.GetResponse();
}
catch (WebException e)
{
//请求失败
throw new ApiException((int)e.Status, e.Message);
}
if (webresp.StatusCode != HttpStatusCode.OK)
{
throw new ApiException((int)webresp.StatusCode, "Server response code:" + (int)webresp.StatusCode);
}
var respdata = Util.StreamToString(webresp.GetResponseStream(), ContentEncoding);
JObject respJobject;
try
{
respJobject = JsonConvert.DeserializeObject<JObject>(respdata);
}
catch (Exception e)
{
throw new ApiException(e.Message + ":" + respdata);
}
if (respJobject == null)
{
throw new ApiException("Empty response!");
}
return respJobject;
}
}
public static string StreamToString(Stream ss, Encoding enc) { string ret; using (var reader = new StreamReader(ss, enc)) { ret = reader.ReadToEnd(); } ss.Close(); return ret; } public static string UriEncode(string input, bool encodeSlash = false) { var builder = new StringBuilder(); foreach (var b in Encoding.UTF8.GetBytes(input)) if (b >= ‘a‘ && b <= ‘z‘ || b >= ‘A‘ && b <= ‘Z‘ || b >= ‘0‘ && b <= ‘9‘ || b == ‘_‘ || b == ‘-‘ || b == ‘~‘ || b == ‘.‘) builder.Append((char)b); else if (b == ‘/‘) if (encodeSlash) builder.Append("%2F"); else builder.Append((char)b); else builder.Append(‘%‘).Append(b.ToString("X2")); return builder.ToString(); } public static string ParseQueryString(Dictionary<string, string> querys) { if (querys.Count == 0) return ""; return querys .Select(pair => pair.Key + "=" + pair.Value) .Aggregate((a, b) => a + "&" + b); }
try { var a = new NewHttpClient2("localhost:100/.well-known/openid-configuration"); var b = a.PostAction(); var c = new NewHttpClient2(b["token_endpoint"].ToString()) { Bodys = new Dictionary<string, object> { { "scope", "api1" }, { "grant_type", "password" },{"client_id","ro.client" }, {"client_secret","secret" },{ "username","alice"},{"password","password" } }, Method = "POST" }; var d = c.PostAction(); var e = new NewHttpClient2("localhost:101/api/values/get") { BodyType=NewHttpClient2.BodyFormat.Json, Headers=new Dictionary<string, string> { {"Authorization", d["token_type"].ToString() + " " + d["access_token"].ToString() } } }; var f = e.PostAction(); return Ok(f); } catch (ApiException e) { return Ok(e); } catch(Exception e) { return Ok(e); }
[Serializable] public class ApiException:Exception { public int Code { get; set; } public ApiException() { Code = -1; } public ApiException(string message) : base(message) { } public ApiException(int code, string message) : base(message) { Code = code; } }
public static string StreamToString(Stream ss, Encoding enc) { string ret; using (var reader = new StreamReader(ss, enc)) { ret = reader.ReadToEnd(); } ss.Close(); return ret; } public static string UriEncode(string input, bool encodeSlash = false) { var builder = new StringBuilder(); foreach (var b in Encoding.UTF8.GetBytes(input)) if (b >= ‘a‘ && b <= ‘z‘ || b >= ‘A‘ && b <= ‘Z‘ || b >= ‘0‘ && b <= ‘9‘ || b == ‘_‘ || b == ‘-‘ || b == ‘~‘ || b == ‘.‘) builder.Append((char)b); else if (b == ‘/‘) if (encodeSlash) builder.Append("%2F"); else builder.Append((char)b); else builder.Append(‘%‘).Append(b.ToString("X2")); return builder.ToString(); } public static string ParseQueryString(Dictionary<string, string> querys) { if (querys.Count == 0) return ""; return querys .Select(pair => pair.Key + "=" + pair.Value) .Aggregate((a, b) => a + "&" + b); }
又琢磨http新封装方法了,这个,估计更完善些,返回数据默认能转换为jobject,不然修改postaction下
本文共计755个文字,预计阅读时间需要4分钟。
javapublic class NewHttpClient2 { public enum BodyFormat { Formed, Json } public BodyFormat BodyType; public String Method; public Uri Uri; public Encoding ContentEncoding; public Dictionary Bodies; public Dictionary Headers;}
public class NewHttpClient2
{
public enum BodyFormat
{
Formed, Json
}
public BodyFormat BodyType;
public string Method;
public Uri Uri;
public Encoding ContentEncoding;
public Dictionary<string, object> Bodys;
public Dictionary<string, string> Headers;
public Dictionary<string, string> Querys;
public int Timeout;
private NewHttpClient2()
{
BodyType = BodyFormat.Formed;
Method = "GET";
ContentEncoding = Encoding.UTF8;
Bodys = new Dictionary<string, object>();
Headers = new Dictionary<string, string>();
Querys = new Dictionary<string, string>();
ServicePointManager.Expect100Continue = false;
Timeout = 60000;
}
public NewHttpClient2(string uri) : this()
{
Uri = new Uri(uri);
}
public HttpWebRequest HttpWebRequest;
public string UriWithQuery
{
get
{
return Uri + "?" + Util.ParseQueryString(Querys);
}
}
public JObject PostAction()
{
HttpWebRequest = (HttpWebRequest)WebRequest.Create(UriWithQuery);
HttpWebRequest.Method = Method;
HttpWebRequest.ReadWriteTimeout = 30000;
foreach (var header in Headers)
{
HttpWebRequest.Headers.Add(header.Key, header.Value);
}
byte[] body = null;
switch (BodyType)
{
case BodyFormat.Formed:
{
var bodydata = Bodys.Select(pair => pair.Key + "=" + Util.UriEncode(pair.Value.ToString()))
.DefaultIfEmpty("")
.Aggregate((a, b) => a + "&" + b);
body = ContentEncoding.GetBytes(bodydata);
HttpWebRequest.ContentType = "application/x-www-form-urlencoded";
break;
}
case BodyFormat.Json:
{
var bodydata = JsonConvert.SerializeObject(Bodys);
body = ContentEncoding.GetBytes(bodydata);
HttpWebRequest.ContentType = "application/json";
break;
}
}
if (body != null && Bodys.Count > 0)
{
var stream = HttpWebRequest.GetRequestStream();
stream.Write(body, 0, body.Length);
stream.Close();
}
HttpWebResponse webresp;
try
{
webresp = (HttpWebResponse)HttpWebRequest.GetResponse();
}
catch (WebException e)
{
//请求失败
throw new ApiException((int)e.Status, e.Message);
}
if (webresp.StatusCode != HttpStatusCode.OK)
{
throw new ApiException((int)webresp.StatusCode, "Server response code:" + (int)webresp.StatusCode);
}
var respdata = Util.StreamToString(webresp.GetResponseStream(), ContentEncoding);
JObject respJobject;
try
{
respJobject = JsonConvert.DeserializeObject<JObject>(respdata);
}
catch (Exception e)
{
throw new ApiException(e.Message + ":" + respdata);
}
if (respJobject == null)
{
throw new ApiException("Empty response!");
}
return respJobject;
}
}
public static string StreamToString(Stream ss, Encoding enc) { string ret; using (var reader = new StreamReader(ss, enc)) { ret = reader.ReadToEnd(); } ss.Close(); return ret; } public static string UriEncode(string input, bool encodeSlash = false) { var builder = new StringBuilder(); foreach (var b in Encoding.UTF8.GetBytes(input)) if (b >= ‘a‘ && b <= ‘z‘ || b >= ‘A‘ && b <= ‘Z‘ || b >= ‘0‘ && b <= ‘9‘ || b == ‘_‘ || b == ‘-‘ || b == ‘~‘ || b == ‘.‘) builder.Append((char)b); else if (b == ‘/‘) if (encodeSlash) builder.Append("%2F"); else builder.Append((char)b); else builder.Append(‘%‘).Append(b.ToString("X2")); return builder.ToString(); } public static string ParseQueryString(Dictionary<string, string> querys) { if (querys.Count == 0) return ""; return querys .Select(pair => pair.Key + "=" + pair.Value) .Aggregate((a, b) => a + "&" + b); }
try { var a = new NewHttpClient2("localhost:100/.well-known/openid-configuration"); var b = a.PostAction(); var c = new NewHttpClient2(b["token_endpoint"].ToString()) { Bodys = new Dictionary<string, object> { { "scope", "api1" }, { "grant_type", "password" },{"client_id","ro.client" }, {"client_secret","secret" },{ "username","alice"},{"password","password" } }, Method = "POST" }; var d = c.PostAction(); var e = new NewHttpClient2("localhost:101/api/values/get") { BodyType=NewHttpClient2.BodyFormat.Json, Headers=new Dictionary<string, string> { {"Authorization", d["token_type"].ToString() + " " + d["access_token"].ToString() } } }; var f = e.PostAction(); return Ok(f); } catch (ApiException e) { return Ok(e); } catch(Exception e) { return Ok(e); }
[Serializable] public class ApiException:Exception { public int Code { get; set; } public ApiException() { Code = -1; } public ApiException(string message) : base(message) { } public ApiException(int code, string message) : base(message) { Code = code; } }
public static string StreamToString(Stream ss, Encoding enc) { string ret; using (var reader = new StreamReader(ss, enc)) { ret = reader.ReadToEnd(); } ss.Close(); return ret; } public static string UriEncode(string input, bool encodeSlash = false) { var builder = new StringBuilder(); foreach (var b in Encoding.UTF8.GetBytes(input)) if (b >= ‘a‘ && b <= ‘z‘ || b >= ‘A‘ && b <= ‘Z‘ || b >= ‘0‘ && b <= ‘9‘ || b == ‘_‘ || b == ‘-‘ || b == ‘~‘ || b == ‘.‘) builder.Append((char)b); else if (b == ‘/‘) if (encodeSlash) builder.Append("%2F"); else builder.Append((char)b); else builder.Append(‘%‘).Append(b.ToString("X2")); return builder.ToString(); } public static string ParseQueryString(Dictionary<string, string> querys) { if (querys.Count == 0) return ""; return querys .Select(pair => pair.Key + "=" + pair.Value) .Aggregate((a, b) => a + "&" + b); }
又琢磨http新封装方法了,这个,估计更完善些,返回数据默认能转换为jobject,不然修改postaction下

