/// <summary> /// POST请求 /// </summary> /// <param name="relativeUrl">相对地址</param> /// <param name="data">IT类型数据</param> /// <param name="parameters">参数</param> /// <returns>OT类型数据</returns> public OT Post(string relativeUrl, IT data, IDictionary <string, ICollection <string> > parameters) { var u = new UriBuilder(ServerUrl); u.Path += relativeUrl; u.Query = parameters.BuildParams(); var request = WebRequest.Create(u.Uri) as HttpWebRequest; if (!string.IsNullOrEmpty(ContentType)) { request.ContentType = ContentType; } request.Method = "POST"; request.KeepAlive = KeepAlive; if (ReadWriteTimeout > 0) { request.ReadWriteTimeout = ReadWriteTimeout; } if (Timeout > 0) { request.Timeout = Timeout; } Stream requestStream = null; try { requestStream = request.GetRequestStream(); if (data != null) { RequestCodecFactory.Create().Marshal(data, requestStream); } } finally { if (requestStream != null) { requestStream.Close(); } } WebResponse response = null; Stream stream = null; try { response = request.GetResponse(); stream = response.GetResponseStream(); return((OT)ResponseCodecFactory.Create().Unmarshal(stream)); } finally { if (stream != null) { stream.Close(); } if (response != null) { response.Close(); } } }
/// <summary> /// GET请求 /// </summary> /// <param name="relativeUrl">相对地址</param> /// <param name="parameters">参数</param> /// <returns>T类型数据</returns> public T Get(string relativeUrl, IDictionary <string, ICollection <string> > parameters) { var u = new UriBuilder(ServerUrl); u.Path += relativeUrl; var request = WebRequest.Create(u.Uri) as HttpWebRequest; var bytes = System.Text.Encoding.UTF8.GetBytes(parameters.BuildParams()); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = bytes.Length; request.KeepAlive = KeepAlive; if (ReadWriteTimeout > 0) { request.ReadWriteTimeout = ReadWriteTimeout; } if (Timeout > 0) { request.Timeout = Timeout; } var cached = Cache[u.Uri.ToString()]; if (cached != null) { request.Headers.Add(HttpRequestHeader.IfNoneMatch, cached.ETag); } using (var requestStream = request.GetRequestStream()) { requestStream.Write(bytes, 0, bytes.Length); } WebResponse response = null; Stream stream = null; try { response = request.GetResponse(); stream = response.GetResponseStream(); T result = (T)ResponseCodecFactory.Create().Unmarshal(stream); var etag = response.Headers[HttpResponseHeader.ETag]; Cache.Add(new SolrCacheEntity <T>(u.Uri.ToString(), etag, result)); return(result); } catch (WebException e) { if (e.Response != null) { var r = (HttpWebResponse)e.Response; if (r.StatusCode == HttpStatusCode.NotModified) { return(cached.Data); } } throw e; } finally { if (stream != null) { stream.Close(); } if (response != null) { response.Close(); } } }