Я пытаюсь вызвать веб-службу погоды из веб-формы (страница ASPX). Ожидаемый результат будет XML ответ с прогнозом погоды. Однако, когда я запускаю веб-форму в браузере, я получаю сообщение об ошибке «Ошибка сервера в приложении».
Описание: HTTP 404. Ресурс, который вы ищете (или одна из его зависимостей), может иметь был удален, изменилось его имя или временно недоступен. Пожалуйста, просмотрите следующий URL и убедитесь, что он написан правильно.
Запрошенный URL: / Home / WeatherServiceForm
Информация о версии: Microsoft . NET Framework Версия: 4.0.30319; ASP. NET Версия: 4.8.4075.0 "
Я считаю, что в моих кодах нет ошибок, и могу думать только о двух возможных причинах ошибки , Во-первых, неправильный Framework, во-вторых, версия пути URL.
Я попытался изменить структуру, которую я использую. Из "ASP. NET Базовое веб-приложение -> ASP. NET Веб-приложение (. NET Framework) Я использую Visual Stud ios 2019, и он автоматически генерирует MVC тип кода.
Во-вторых url.Path = "premium / v2 / weather.ashx"; url.Path должен быть v1 или v2. Я не уверен.
protected void Page_Load(object sender, EventArgs e)
{
XmlDocument wsResponseXmlDoc = new XmlDocument();
//http://api.worldweatheronline.com/premium/v1/weather.ashx?key=****&q=London&format=xml&num_of_days=5
//id=jipx(spacetime0)
UriBuilder url = new UriBuilder();
url.Scheme = "http";// Same as "http://"
url.Host = "api.worldweatheronline.com";
url.Path = "premium/v2/weather.ashx";// change to v2
url.Query = "q=china&format=xml&num_of_days=5&key=******";
//Make a HTTP request to the global weather web service
wsResponseXmlDoc = MakeRequest(url.ToString());
if (wsResponseXmlDoc != null)
{
//display the XML response for user
String xmlString = wsResponseXmlDoc.InnerXml;
Response.ContentType = "text/xml";
Response.Write(xmlString);
// Save the document to a file and auto-indent the output.
XmlTextWriter writer = new XmlTextWriter(Server.MapPath("xmlweather.xml"), null);
writer.Formatting = Formatting.Indented;
wsResponseXmlDoc.Save(writer);
//You're never closing the writer, so I would expect it to keep the file open. That will stop future attempts to open the file
writer.Close();
}
else
{
Response.ContentType = "text/html";
Response.Write("<h2> error accessing web service </h2>");
}
}
public static XmlDocument MakeRequest(string requestUrl)
{
try
{
HttpWebRequest request = WebRequest.Create(requestUrl) as HttpWebRequest;
//Set time out to 15 seconds
request.Timeout = 15 * 1000;
request.KeepAlive = false;
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(response.GetResponseStream());
return (xmlDoc);
}
catch (Exception ex)
{
return null;
}
}
}