LpsRetsClient.Http.RetsRequest.Post C# (CSharp) Method

Post() public method

public Post ( IRetsRequest retsRequest ) : string
retsRequest IRetsRequest
return string
        public string Post(IRetsRequest retsRequest)
        {
            var methodUri = new Uri(retsRequest.MethodUrl);
            var sessionInfo = retsRequest.Session;

            var networkCredential = new NetworkCredential(sessionInfo.UserName, sessionInfo.Password);
            var authMethod = retsRequest.Session.AuthMethod == AuthenticationMethod.Basic ? "Basic" : "Digest";
            var credentials = new CredentialCache {{methodUri, authMethod, networkCredential}};

            var request = (HttpWebRequest)WebRequest.Create(methodUri);
            request.PreAuthenticate = true;
            request.Credentials = credentials;
            request.UserAgent = sessionInfo.UserAgent;
            request.Headers.Add("RETS-Version", sessionInfo.RetsVersion);
            request.Method = "POST";
            request.ContentType = "text/xml";
            request.CookieContainer = sessionInfo.Cookies ?? new CookieContainer();

            if (!string.IsNullOrWhiteSpace(sessionInfo.UserAgentAuth))
                request.Headers.Add("RETS-UA-Authorization", GetUserAgentAuthorization(sessionInfo));

            foreach (var header in retsRequest.Headers)
                request.Headers.Add(header.Key, header.Value);

            // Handle Digest calculations here because PreAuthenticate doesn't work properly for digest
            if (!string.IsNullOrWhiteSpace(sessionInfo.Authorization))
            {
                var digestUtility = new DigestUtility();
                var newHeader = digestUtility.UpdateAuthorizationHeader(sessionInfo.Authorization, methodUri.AbsolutePath, sessionInfo.Password, request.Method);
                if (!string.IsNullOrWhiteSpace(newHeader))
                    request.Headers.Add("Authorization", newHeader);
            }

            // Prepare the request after everything has been set up, but before we make the call
            // so the request can be modified as needed for the transaction.
            // NOTE: Set headers before streaming PostBody data
            retsRequest.PrepareRequest(request);

            byte[] rawPostData = retsRequest.PostBody;
            if (rawPostData != null && rawPostData.Length > 0)
            {
                request.ContentLength = rawPostData.Length;

                using (var requestStream = request.GetRequestStream())
                {
                    requestStream.Write(rawPostData, 0, rawPostData.Length);
                    requestStream.Close();
                }
            }
            else
            {
                request.ContentLength = 0;
            }

            HttpWebResponse response = null;

            try
            {
                response = (HttpWebResponse)request.GetResponse();

                // Store the authorization header value for subsequent use
                sessionInfo.Authorization = request.Headers.Get("Authorization");

                sessionInfo.Cookies = new CookieContainer();
                foreach (Cookie cookie in response.Cookies)
                    sessionInfo.Cookies.Add(cookie);

                using (var stream = new StreamReader(response.GetResponseStream()))
                {
                    string result = stream.ReadToEnd();

                    return result;
                }
            }
            finally
            {
                if (response != null)
                {
                    response.Close();
                }
            }
        }

Usage Example

Example #1
0
        public RetsLoginResponse Login()
        {
            var request = new RetsRequest();
            LoginInfo = new RetsLoginResponse();

            var loginRequest = new RetsLoginRequest
                                   {
                                       MethodUrl = SessionInfo.BaseUrl + SessionInfo.LoginUrl,
                                       Session = SessionInfo
                                   };

            LoginInfo.Parse(request.Post(loginRequest));
            IsValid = LoginInfo.IsSuccessful;

            return LoginInfo;
        }
All Usage Examples Of LpsRetsClient.Http.RetsRequest::Post