Пример #1
0
        public EasyPeasyFactory(IMediaTypeHandlerRegistry registry)
        {
            Ensure.IsNotNull(registry, "registry");

            interceptors  = new List <IRequestInterceptor>();
            this.registry = registry;
        }
Пример #2
0
        /// <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);
        }