private static void Main() { var swisClient = new SwisClient(Hostname, Username, Password); const string query = @SELECT TOP 1 AlertObjectID FROM Orion.AlertActive WHERE ISNULL(Acknowledged,0)!=1 ORDER BY TriggeredDateTime DESC"; JToken queryResult = swisClient.QueryAsync(query).Result; var alertObjectId = (int)queryResult["results"][0]["AlertObjectID"]; } public Task<JToken> QueryAsync(string query, object parameters = null) { return SwisCallAsync(client => { var request = new JObject(); request["query"] = query; if (parameters != null) request["parameters"] = JObject.FromObject(parameters); HttpContent content = new StringContent(request.ToString(), Encoding.UTF8, "application/json"); return client.PostAsync("Query", content); }); } private async Task<JToken> SwisCallAsync(Func<HttpClient, Task<HttpResponseMessage>> doRequest) { var handler = new WebRequestHandler { Credentials = new NetworkCredential(_username, _password), PreAuthenticate = true, ServerCertificateValidationCallback = ValidateServerCertificate }; using (var client = new HttpClient(handler)) { client.BaseAddress = new Uri(string.Format("https://{0}:17778/SolarWinds/InformationService/v3/Json/", _hostname)); HttpResponseMessage response = await doRequest(client); // response variable (above line) ends up containing a json string with a StatusCode of 403 var result = JToken.Load(new JsonTextReader(new StreamReader(await response.Content.ReadAsStreamAsync()))); if (!response.IsSuccessStatusCode) { throw new ApplicationException(string.Format("Server returned error: {0} {1}{2}{3}", (int)response.StatusCode, response.ReasonPhrase, Environment.NewLine, result)); } return result; } } |