1 public class Connection
2 {
3 //实例化Connection对象
4 public static Connection GetInstance(Requester reqer)
5 {
6 Connection instance = null;
7 if (!reqer.IsauthforQC)
8 {
9 instance = new Connection();
10 reqer.Instance = instance;
11 }
12 else
13 {
14 instance = reqer.Instance;
15 }
16 return instance;
17 }
18
19 /// <summary>
20 /// 通过初始化,进行登陆授权并保存Cookie 和Session到请求对象中,下次使用
21 /// </summary>
22 /// <param name="reqer"></param>
23 /// <returns></returns>
24 public bool initConnection(Requester reqer)
25 {
26 string url = reqer.Qs.Url + @"/qcbin/authentication-point/authenticate";// 校验登陆成功,并返回Cookie
27 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
28 request.Method = "Get";
29 request.ContentType = "application/xml";
30
31 string authInfo = reqer.Username.Trim() + ":" + reqer.Password.Trim();
32 authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
33 request.Headers[HttpRequestHeader.Authorization] = "Basic " + authInfo;
34 try
35 {
36 using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
37 {
38 string StrCookie = response.Headers.ToString();
39 string StrCookie1 = StrCookie.Substring(StrCookie.IndexOf("LWSSO_COOKIE_KEY=") + 17);// 截取Cookie
40 StrCookie1 = StrCookie1.Substring(0, StrCookie1.IndexOf(";"));
41 reqer.Qs.Cookie = StrCookie1; // 保存Cookie 到requester 对象
42 StreamReader reader = new StreamReader(response.GetResponseStream());
43 string result = reader.ReadToEnd().ToString();
44 Uri target = new Uri(reqer.Qs.Url);
45 HttpWebRequest myWebRequest1 = (HttpWebRequest)WebRequest.Create(reqer.Qs.Url + @"/qcbin/rest/site-session");// 校验登陆成功,并返回Session
46 myWebRequest1.Method = "Post";
47 myWebRequest1.ContentType = "text/xml";
48 myWebRequest1.CookieContainer = new CookieContainer();
49 myWebRequest1.CookieContainer.Add(new Cookie("LWSSO_COOKIE_KEY", StrCookie1) {Domain = target.Host });// 添加Cookie 到本次请求
50 WebResponse webResponse1 = myWebRequest1.GetResponse();
51 string strCookie2 = webResponse1.Headers.ToString();
52 strCookie2 = strCookie2.Substring(strCookie2.IndexOf("QCSession=")+ 10);// 截取Session
53 strCookie2 = strCookie2.Substring(0, strCookie2.IndexOf(";"));
54 reqer.Qs.Session = strCookie2;// 保存Session到requester 对象
55 reqer.Qs.Expiretime = DateTime.Now.AddMinutes(2);//设定请求有效期
56 }
57 }
58 catch (Exception e)
59 {
60
61 return false;
62 }
63 reqer.IsauthforQC = true;// 授权成功
64 return true;
65
66 }
67 /// <summary>
68 /// 通过Get 请求获取API信息
69 /// </summary>
70 /// <param name="reqer">请求对象</param>
71 /// <param name="queryURL">请求具体API方法</param>
72 /// <param name="requesttype">请求类型(GET,Post..)</param>
73 /// <param name="accepttype">接受类型(application/json..)</param>
74 /// <returns></returns>
75 public string SendRequest(Requester reqer, string queryURL, string requesttype, string accepttype)
76 {
77 bool isauth = false;
78 string result = string.Empty;
79
80 if (!reqer.IsauthforQC)
81 {
82 isauth = initConnection(reqer);
83 }
84 else
85 {
86 isauth = true;
87 }
88
89 if (isauth)
90 {
91 HttpWebRequest myWebRequest2 = (HttpWebRequest)WebRequest.Create(reqer.Qs.Url + queryURL);
92 myWebRequest2.Method = requesttype;
93 myWebRequest2.ContentType = "application/json";
94 myWebRequest2.Accept = accepttype;
95 myWebRequest2.CookieContainer = new CookieContainer();
96 Uri target = new Uri(reqer.Qs.Url);
97 myWebRequest2.CookieContainer.Add(new Cookie("LWSSO_COOKIE_KEY", reqer.Qs.Cookie) { Domain = target.Host });// 添加Cookie 到本次请求
98 myWebRequest2.CookieContainer.Add(new Cookie("QCSession", reqer.Qs.Session) { Domain = target.Host });// 添加Session 到本次请求
99 try
100 {
101 WebResponse webResponse2 = myWebRequest2.GetResponse();
102 StreamReader reader2 = new StreamReader(webResponse2.GetResponseStream());
103 result = reader2.ReadToEnd().ToString();//获取结果
104 }
105 catch (Exception e)
106 {
107
108 result = "";
109 }
110 }
111 return result;
112 }
113 /// <summary>
114 /// 通过PUT请求修改对象信息
115 /// </summary>
116 /// <param name="reqer"></param>
117 /// <param name="updateValue"></param>
118 /// <param name="requesttype"></param>
119 /// <param name="accepttype"></param>
120 /// <param name="domain"></param>
121 /// <returns></returns>
122 public string PUTRequest(Requester reqer, string updateValue, string requesttype, string accepttype, string domain)
123 {
124 bool isauth = false;
125 string result = "";
126 int columnsize = 385; // the field column is varchar(255) in DB
127 if (!reqer.IsauthforQC)
128 {
129 isauth = initConnection(reqer);
130 }
131 else
132 {
133 isauth = true;
134 }
135 if (isauth)
136 {
137 try
138 {
139 HttpWebRequest myWebRequest2;
140
141 // get the current value
142 string url = "URL";//需要访问的方法
143 var projectstr = SendRequest(reqer, url, "Get", "application/json");// 获取返回结果
144
145 JObject Fields = (JObject)JsonConvert.DeserializeObject(projectstr);
146 StringBuilder currentValue = new StringBuilder();
147
148 // 获取需要修改对象属性值
149 JArray fld = (JArray)Fields["Fields"];
150 foreach (JObject item in fld)
151 {
152 if (item["Name"].ToString().Equals("user-template-13"))
153 {
154 try
155 {
156 // append the existing value
157 currentValue.Append(item["values"][0]["value"].ToString());
158 }
159 catch (Exception)
160 {
161 }
162 }
163 }
164 // append the new value
165 currentValue.Append(updateValue);//在原值后面增加新值
166
167 myWebRequest2 = (HttpWebRequest)WebRequest.Create(reqer.Qs.Url + "url1");//访问更新的方法
168
169 myWebRequest2.Method = "PUT";
170 myWebRequest2.ContentType = "application/xml";
171 myWebRequest2.Accept = "application/xml";
172 myWebRequest2.CookieContainer = new CookieContainer();
173 Uri target = new Uri(reqer.Qs.Url);
174 myWebRequest2.CookieContainer.Add(new Cookie("LWSSO_COOKIE_KEY", reqer.Qs.Cookie) { Domain = target.Host });
175 myWebRequest2.CookieContainer.Add(new Cookie("QCSession", reqer.Qs.Session) { Domain = target.Host });
176
177 // xml 对象
178 XDocument postDoc = new XDocument(
179 new XElement("Entity", new XAttribute("Type", "test"),
180 new XElement("Fields",
181 new XElement("Field", new XAttribute("Name", "user-template-13"), new XElement("Value", currentValue.ToString())))));
182 // xml 对象
183
184 var bytes = Encoding.ASCII.GetBytes(postDoc.ToString());
185 Stream requestStream = myWebRequest2.GetRequestStream();
186
187 // the field column is varchar(255) in DB
188 if (bytes.Length > columnsize)
189 {
190 return "Limit";
191 }
192 requestStream.Write(bytes, 0, bytes.Length);
193 requestStream.Close();
194
195 HttpWebResponse res = (HttpWebResponse)myWebRequest2.GetResponse();
196 if (res.StatusCode == HttpStatusCode.OK)
197 {
198 result = "Success";
199 }
200 else
201 {
202 result = "Fail";
203 }
204 }
205 catch (WebException ex)
206 {
207 result = "Fail";
208 throw ex;
209 }
210 catch (Exception ex)
211 {
212 result = "Fail";
213 throw ex;
214 }
215 }
216 return result;
217 }
218 }