Ich habe ein großes Problem mit diesem Code Ich versuche, einfach eine Liste der Adresse von craftycllick Server herunterladen, die xml basiert Ich verwende Webclient, um den Download zu tun, aber es ist andernfalls noch, wenn ich an den Browser gehen die DatenWebClient-Download von Anwendungsdaten, die Ergebnis nicht in Leser zurückgeben
public XmlTextReader readXML(string postcode, string response, string accessCode)
{
//Create URL
string url = $"http://pcls1.craftyclicks.co.uk/xml/rapidaddress?postcode={postcode}&response={response}&key={accessCode}";
try
{
//Create WebRequest
WebRequest request = WebRequest.Create(url);
using (Stream responseStream = request.GetResponse().GetResponseStream())
{
if (responseStream != null)
{
using (TextReader textReader = new StreamReader(responseStream))
{
XmlTextReader reader = new XmlTextReader(textReader);
Debug.Assert(reader != null, "Reader is NULL");
return reader;
}
}
throw new Exception("ResponseStream is NULL");
}
}
catch (WebException ex)
{
return null;
}
}
Xml, die zurückgegeben wird, ist
<CraftyResponse><address_data_formatted><delivery_point><organisation_name>THE BAKERY</organisation_name><department_name/><line_1>1 HIGH STREET</line_1><line_2>CRAFTY VALLEY</line_2><udprn>12345678</udprn></delivery_point><delivery_point><organisation_name>FILMS R US</organisation_name><department_name/><line_1>3 HIGH STREET</line_1><line_2>CRAFTY VALLEY</line_2><udprn>12345679</udprn></delivery_point><delivery_point><organisation_name>FAMILY BUTCHER</organisation_name><department_name/><line_1>7 HIGH STREET</line_1><line_2>CRAFTY VALLEY</line_2><udprn>12345680</udprn></delivery_point><delivery_point><organisation_name/><department_name/><line_1>BIG HOUSE, HIGH STREET</line_1><line_2>CRAFTY VALLEY</line_2><udprn>12345681</udprn></delivery_point><delivery_point><organisation_name/><department_name/><line_1>LITTLE COTTAGE</line_1><line_2>17 HIGH STREET, CRAFTY VALLEY</line_2><udprn>12345682</udprn></delivery_point><delivery_point_count>5</delivery_point_count><town>BIG CITY</town><postal_county>POSTAL COUNTY</postal_county><traditional_county>TRADITIONAL COUNTY</traditional_county><postcode>AA1 1AA</postcode></address_data_formatted></CraftyResponse>
Und die Routine ich Parse verwenden.
public DataTable returnAddressList(string postcode, string accessCode)
{
try
{
DataTable dtReturn = new DataTable();
dtReturn.Columns.Add("PropertyItem", Type.GetType("System.String"));
dtReturn.Columns.Add("PropertyValue", Type.GetType("System.String"));
postcode = postcode.Replace(" ", "");
XmlTextReader reader = readXML(postcode, "data_formatted", accessCode);
string option1 = "";
string option2 = "";
while (reader.Read())
{
if (reader.Name.Equals("line_1"))
{
option1 = reader.ReadString();
}
if (reader.Name.Equals("udprn"))
{
option2 = reader.ReadString();
}
if (option1 != "" && option2 != "")
{
dtReturn.Rows.Add(new object[] { option1, option2 });
option1 = "";
option2 = "";
}
}
return dtReturn;
}
catch (Exception ex)
{
return null;
}
}
Und My Calling Code der obigen Funktion ist
fhsBl.Helpers.CraftyPostCodeLookup _postCodeLookup = new fhsBl.Helpers.CraftyPostCodeLookup();
DataTable dt = new DataTable();
dt = _postCodeLookup.returnAddressList("AA11AA", "API KEY DONT BE NOSY");
Edit 1 Ok beriet ich meinen Code geändert, um die Verwendung von statment zu verwenden und den Inhalt in das lesen, aber ich bin immer ein weiterer Fehler und immer noch keine Datenproduktion.
public DataTable readXML(string postcode, string response, string accessCode)
{
//Create URL
string url = $"http://pcls1.craftyclicks.co.uk/xml/rapidaddress?postcode={postcode}&response={response}&key={accessCode}";
try
{
DataTable dtReturn = new DataTable();
dtReturn.Columns.Add("PropertyItem", Type.GetType("System.String"));
dtReturn.Columns.Add("PropertyValue", Type.GetType("System.String"));
//Create WebRequest
WebRequest request = WebRequest.Create(url);
using (Stream responseStream = request.GetResponse().GetResponseStream())
{
if (responseStream != null)
{
using (TextReader textReader = new StreamReader(responseStream))
{
XmlTextReader reader = new XmlTextReader(textReader);
postcode = postcode.Replace(" ", "");
string option1 = "";
string option2 = "";
while (reader.Read())
{
if (reader.Name.Equals("line_1"))
{
option1 = reader.ReadString();
}
if (reader.Name.Equals("udprn"))
{
option2 = reader.ReadString();
}
if (option1 != "" && option2 != "")
{
dtReturn.Rows.Add(new object[] { option1, option2 });
option1 = "";
option2 = "";
}
}
return dtReturn;
}
}
throw new Exception("ResponseStream is NULL");
}
}
catch (WebException ex)
{
return null;
}
}
Screenshot der Fehlersuche
Vielen Dank für die Abstimmung bis – rogue39nin
Was ziehen? Gibt es eine Ausnahme? – pijemcolu
@pijemcolu Ich schaue tatsächlich auf den Stack-Trace und sein Sprichwort kann nicht aus einem geschlossenen Text-Stream lesen, wenn das machen, da das innerhalb der Fang ist versuchen Element von returnAddressList – rogue39nin