public EasyPeasyFactory(IMediaTypeHandlerRegistry registry) { Ensure.IsNotNull(registry, "registry"); interceptors = new List <IRequestInterceptor>(); this.registry = registry; }
/// <summary> /// Creates a web request based on the information held within this class /// </summary> /// <param name="baseUri"> The base Uri. </param> /// <param name="credentials"> The credentials. </param> /// <param name="mediaRegistry"> The registry of media type handlers</param> /// <returns> The created request </returns> public WebRequest CreateRequest( Uri baseUri, ICredentials credentials, IMediaTypeHandlerRegistry mediaRegistry) { Uri fullUri = this.CreateUri(baseUri); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(fullUri); request.Credentials = credentials; request.Method = this.Verb.ToString(); request.ContentType = this.Produces; request.Accept = this.Consumes; foreach (var kv in this.headerParameters.Where(kv => kv.Value != null && kv.Key != null)) { // WebRequest throws exceptions if the Accept and Content-Type headers are set indirectly, // so need to check for these explicitly and set the associated properties if found if (string.Compare(kv.Key, AcceptsHeader, StringComparison.InvariantCultureIgnoreCase) == 0) { request.Accept = Convert.ToString(kv.Value); } else if (string.Compare(kv.Key, ContentTypeHeader, StringComparison.InvariantCultureIgnoreCase) == 0) { request.ContentType = Convert.ToString(kv.Value); } else { request.Headers.Add(kv.Key, Convert.ToString(kv.Value)); } } // Choose between form parameters and a body - cannot have both if (this.formParameters.Count > 0) { Stream requestStream = request.GetRequestStream(); StreamWriter writer = new StreamWriter(requestStream); writer.Write(this.formParameters.ToString()); writer.Flush(); } else if (this.RequestBody != null) { IMediaTypeHandler handler; if (mediaRegistry.TryGetHandler(this.RequestBody.GetType(), this.Produces, out handler)) { handler.WriteObject(request, this.RequestBody, request.GetRequestStream()); } } return(request); }