Пример #1
0
        //*********************************************************************
        ///
        /// <summary>
        ///
        /// </summary>
        /// <param name="requestType"></param>
        /// <param name="requestUrl"></param>
        /// <param name="bodyContents"></param>
        /// <returns></returns>
        ///
        //*********************************************************************

        public HttpResponse PerformRequestArm(RequestType_Enum requestType,
                                              string requestUrl, string bodyContents = null)
        {
            var responseOut = new HttpResponse();

            try
            {
                var requestUri = new Uri(requestUrl);
                var request    = WebRequest.Create(requestUri) as HttpWebRequest;

                if (null == request)
                {
                    throw new Exception("Unable to create a HttpWebRequest for : " + requestUri);
                }

                request.Headers.Add(HttpRequestHeader.Authorization, "Bearer " + Connection.AdToken.AccessToken);

                request.Method      = requestType.ToString();
                request.ContentType = "application/json";
                request.Accept      = "application/json";

                if (requestType == RequestType_Enum.POST | requestType == RequestType_Enum.PUT)
                {
                    var requestStream = request.GetRequestStream();
                    var streamWriter  = new StreamWriter(requestStream, Encoding.UTF8);

                    streamWriter.Write(bodyContents);

                    streamWriter.Close();
                    requestStream.Close();
                }

                var response = (HttpWebResponse)request.GetResponse();

                if (response.ContentLength > 0)
                {
                    var responseStream = response.GetResponseStream();

                    if (null == responseStream)
                    {
                        throw new Exception("Unable to create Stream from HttpWebResponse");
                    }

                    var reader = new StreamReader(responseStream, Encoding.ASCII);
                    responseOut.Body = reader.ReadToEnd();

                    var err = FetchJsonValue(responseOut.Body, "error") as Dictionary <string, dynamic>;

                    if (null != err)
                    {
                        responseOut.HadError = true;
                        responseOut.Body    += string.Format("Web Error making REST API call.\r\nCode: {0}, Message: {1}",
                                                             err["code"], err["code"]);
                    }

                    var props = FetchJsonValue(responseOut.Body, "properties") as Newtonsoft.Json.Linq.JObject;

                    if (null != props)
                    {
                        if (null != props["provisioningState"])
                        {
                            responseOut.ProviderRequestState = props["provisioningState"].ToString();
                        }

                        if (null != props["correlationId"])
                        {
                            var now = DateTime.UtcNow;

                            responseOut.StatusCheckUrl = AzureEventOps.BuildEventFetchUrl(
                                props["correlationId"].ToString(),
                                Connection.SubcriptionID, now.AddMinutes(-5), now.AddHours(4));
                        }

                        responseOut.HadError = false;
                    }

                    reader.Close();
                    responseStream.Close();
                }
                else
                {
                    if (!requestUrl.Contains("/operations/"))
                    {
                        responseOut.Body = "No HTTP Response Body Returned.";
                    }
                }

                foreach (var key in response.Headers.Keys)
                {
                    var keyName = key as string;

                    if (keyName.Equals("Azure-AsyncOperation"))
                    {
                        responseOut.StatusCheckUrl = response.Headers.GetValues(keyName)[0] as string;
                    }
                }

                response.Close();
            }
            catch (WebException exWeb)
            {
                var responseStream = exWeb.Response.GetResponseStream();

                if (null == responseStream)
                {
                    responseOut.HadError = true;
                    responseOut.Body    += "Error making REST API call.\r\n" + exWeb.Message + "\r\n";
                    return(responseOut);
                }

                var reader = new StreamReader(responseStream, Encoding.ASCII);

                var responseStatus = (HttpWebResponse)exWeb.Response;
                responseOut.HTTP = (int)responseStatus.StatusCode + " - " +
                                   responseStatus.StatusCode.ToString();
                responseOut.HadError = true;
                responseOut.Body    += "Web Error making REST API call.\r\nMessage: " +
                                       exWeb.Message + "\r\nResponse:\r\n" + reader.ReadToEnd();

                responseStream.Close();
                reader.Close();
            }
            catch (Exception ex)
            {
                responseOut.HadError = true;
                responseOut.Body    += "Error making REST API call.\r\n" + ex.Message + "\r\n";
            }

            return(responseOut);
        }
Пример #2
0
        //*********************************************************************
        ///
        /// <summary>
        ///
        /// </summary>
        /// <param name="requestType"></param>
        /// <param name="requestUrl"></param>
        /// <param name="bodyContents"></param>
        /// <returns></returns>
        /// <remarks>
        /// MSDN: http://msdn.microsoft.com/en-us/library/windowsazure/ee460782.aspx
        /// </remarks>
        ///
        //*********************************************************************

        public HttpResponse PerformRequest(RequestType_Enum requestType,
                                           string requestUrl, string bodyContents = null)
        {
            var responseOut = new HttpResponse();

            try
            {
                var operationsResponse = string.Empty;
                var requestUri         = new Uri(requestUrl);
                var request            = WebRequest.Create(requestUri) as HttpWebRequest;

                if (null == request)
                {
                    throw new Exception("Unable to create a HttpWebRequest for : " + requestUri);
                }

                request.Headers.Add("x-ms-version", ApiVersion.ToString("yyyy-MM-dd"));

                request.Method      = requestType.ToString();
                request.ContentType = "application/xml";

                if (requestType == RequestType_Enum.POST)
                {
                    var xDoc = new XmlDocument();
                    xDoc.Load(new StringReader(CleanRequestBody(bodyContents)));

                    var requestStream = request.GetRequestStream();
                    var streamWriter  = new StreamWriter(requestStream, Encoding.UTF8);
                    xDoc.Save(streamWriter);

                    streamWriter.Close();
                    requestStream.Close();
                }

                var myCert = Connection.Certificate;
                request.ClientCertificates.Add(myCert);

                var response       = (HttpWebResponse)request.GetResponse();
                var responseStatus = response.StatusCode;

                if (response.ContentLength > 0)
                {
                    var responseStream = response.GetResponseStream();

                    if (null == responseStream)
                    {
                        throw new Exception("Unable to create Stream from HttpWebResponse");
                    }

                    var reader = new StreamReader(responseStream);

                    var xDocResp = new XmlDocument();
                    xDocResp.Load(reader);

                    if (requestUrl.Contains("/operations/"))
                    {
                        var xn = xDocResp.SelectSingleNode("/*[local-name()='Operation' and namespace-uri()='http://schemas.microsoft.com/windowsazure']/*[local-name()='Status' and namespace-uri()='http://schemas.microsoft.com/windowsazure']");

                        if (null != xn)
                        {
                            operationsResponse    = xn.InnerXml;
                            responseOut.Operation = operationsResponse;
                        }
                    }

                    responseOut.Body = Util.PrettyPrintXml(xDocResp);

                    responseStream.Close();

                    reader.Close();
                }
                else
                {
                    if (!requestUrl.Contains("/operations/"))
                    {
                        responseOut.Body = "No HTTP Response Body Returned.";
                    }
                }

                //*** https://management.core.windows.net/26661eda-81ca-4307-b331-698118ad668e/operations/7ee88cae5e15489789c829b28e7759f9

                if (!requestUrl.Contains("/operations/") && responseStatus == HttpStatusCode.Accepted)
                {
                    var responseHeaders = response.Headers;
                    var requestId       = responseHeaders.Get("x-ms-request-id");
                    responseOut.StatusCheckUrl = "https://management.core.windows.net/" +
                                                 Connection.SubcriptionID + "/operations/" + requestId;
                    responseOut.Body = "202 - Accepted. Asynch processing. Check status at: " +
                                       responseOut.StatusCheckUrl;
                }

                response.Close();
            }
            catch (WebException exWeb)
            {
                var responseStream = exWeb.Response.GetResponseStream();

                if (null == responseStream)
                {
                    responseOut.HadError = true;
                    responseOut.Body    += "Error making REST API call.\r\n" + exWeb.Message + "\r\n";
                    return(responseOut);
                }

                var reader = new StreamReader(responseStream);

                var xDocResp = new XmlDocument();
                xDocResp.Load(reader);

                var responseStatus = (HttpWebResponse)exWeb.Response;
                responseOut.HTTP = (int)responseStatus.StatusCode + " - " +
                                   responseStatus.StatusCode.ToString();
                responseOut.HadError = true;
                responseOut.Body    += "Web Error making REST API call.\r\nMessage: " +
                                       exWeb.Message + "\r\nResponse:\r\n" + Util.PrettyPrintXml(xDocResp);

                responseStream.Close();

                reader.Close();
            }
            catch (Exception ex)
            {
                responseOut.HadError = true;
                responseOut.Body    += "Error making REST API call.\r\n" + ex.Message + "\r\n";
            }

            return(responseOut);
        }