Я относительно новичок в вызовах REST и, вероятно, новичок в переходе на C #.Я пытаюсь позвонить в Qualys REST для получения информации об устройстве.Моя проблема заключается в том, что когда я выполняю цикл foreach для итерации по списку, консольное приложение завершается сбоем, просто выходя после ввода учетных данных.Я подтвердил, что API принимает мои учетные данные.
Имейте в виду, что я подключаюсь к Qualys с помощью HttpBasicAuthenticator и использую комбинацию RestSharp и XmlSerializer.Я не знаю, правильно ли я это делаю, но вот что я получил до сих пор.Я хотел бы полностью использовать RestSharp, но я совершенно не понимаю, что делать с частью десериализации, поэтому я попытался поработать с XmlSerializer, используя некоторые примеры из Интернета.
class Program
{
const string BaseUrl = "https://qualysapi.qualys.com/";
static void Main(string[] args)
{
Console.WriteLine("Username: ");
var username = Console.ReadLine();
Console.WriteLine("Password: ");
var password = Console.ReadLine();
var _client = new RestClient(BaseUrl);
_client.Authenticator = new HttpBasicAuthenticator(username, password);
var request = new RestRequest("api/2.0/fo/appliance/", Method.GET);
request.AddHeader("X-Requested-With", "REST");
request.AddParameter("action", "list");
request.AddParameter("output_mode", "brief");
var response = _client.Execute(request).Content;
XmlRootAttribute xRoot = new XmlRootAttribute();
xRoot.ElementName = "APPLIANCE_LIST_OUTPUT";
xRoot.IsNullable = true;
XmlSerializer serializer = new XmlSerializer(typeof(List<Appliance>), xRoot);
StringReader stringReader = new StringReader(response);
List<Appliance> applianceValues = (List<Appliance>)serializer.Deserialize(stringReader);
foreach (var i in applianceValues)
{
Console.WriteLine("ID: " + i.ID);
Console.WriteLine("UUID: " + i.UUID);
Console.WriteLine("Name: " + i.NAME);
Console.WriteLine("Software Version: " + i.SOFTWARE_VERSION);
Console.WriteLine("Status: " + i.STATUS);
}
}
}
public class Appliance
{
[XmlElement(ElementName = "id")]
public string ID { get; set; }
[XmlElement(ElementName = "uuid")]
public int UUID { get; set; }
[XmlElement(ElementName = "name")]
public string NAME { get; set; }
[XmlElement(ElementName = "software_ver")]
public int SOFTWARE_VERSION { get; set; }
[XmlElement(ElementName = "status")]
public string STATUS { get; set; }
}
Response: Я получил этот ответ, комментируя цикл foreach и просто Console.WriteLine(response);
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE APPLIANCE_LIST_OUTPUT SYSTEM "https://qualysapi.qualys.com/api/2.0/fo/appliance/appliance_list_output.dtd">
<APPLIANCE_LIST_OUTPUT>
<RESPONSE>
<DATETIME>2019-04-11T12:31:49Z</DATETIME>
<APPLIANCE_LIST>
<APPLIANCE>
<ID>111111</ID>
<UUID>1a2b3c4d-14qw-f00f-6744-g7455556bnf4</UUID>
<NAME>My Appliance</NAME>
<SOFTWARE_VERSION>2.6</SOFTWARE_VERSION>
<RUNNING_SLICES_COUNT>0</RUNNING_SLICES_COUNT>
<RUNNING_SCAN_COUNT>0</RUNNING_SCAN_COUNT>
<STATUS>Online</STATUS>
</APPLIANCE>
<APPLIANCE>
<ID>222222</ID>
<UUID>bv51gh82-g496-88g8-8999-11abcd4567kk</UUID>
<NAME>My Other Appliance</NAME>
<SOFTWARE_VERSION>2.6</SOFTWARE_VERSION>
<RUNNING_SLICES_COUNT>0</RUNNING_SLICES_COUNT>
<RUNNING_SCAN_COUNT>0</RUNNING_SCAN_COUNT>
<STATUS>Offline</STATUS>
</APPLIANCE>
</APPLIANCE_LIST>
</RESPONSE>
</APPLIANCE_LIST_OUTPUT>
Сейчас моя цель - просто вывести на консоль хороший список некоторых полейиз XML.Любая помощь будет принята с благодарностью.
Примечание. Я изменил некоторые значения (ID, UUID, NAME) в ответ на конфиденциальность.