private static WebResponse GetResponse(WebRequestDescriptor proxyRequest, object[] urlArgs, object[] postArgs) { var postData = Encoding.UTF8.GetBytes(String.Format(proxyRequest.PostData, postArgs)); var request = WebRequest.Create(String.Format(proxyRequest.Url, urlArgs)) as HttpWebRequest; if (!String.IsNullOrEmpty(request.Host)) { request.Host = proxyRequest.Host; } request.Method = proxyRequest.Method; request.ContentLength = postData.Length; request.CookieContainer = new CookieContainer(); request.ContentType = proxyRequest.ContentType; using (var responseStream = request.GetRequestStream()) { responseStream.Write(postData, 0, postData.Length); } return(request.GetResponse()); }
/// <summary> /// 调用一个返回Xml数据的Web地址 /// </summary> public static XmlReader CallXmlApi(this WebRequestDescriptor proxyRequest, object[] urlArgs, object[] postArgs) { return(new XmlTextReader(GetResponse(proxyRequest, urlArgs, postArgs).GetResponseStream())); }
/// <summary> /// 调用一个返回二进制流数据的Web地址,用于文件下载 /// </summary> public static WebResponse CallStreamApi(this WebRequestDescriptor proxyRequest, object[] urlArgs, object[] postArgs) { return(GetResponse(proxyRequest, urlArgs, postArgs)); }
/// <summary> /// 调用一个返回JSON数据的Web地址 /// </summary> public static T CallJsonApi <T>(this WebRequestDescriptor proxyRequest, object[] urlArgs, object[] postArgs) where T : class { return(GetResponse(proxyRequest, urlArgs, postArgs).ExtractJsonData <T>()); }