Я пытаюсь вызвать openWeatherApi из asp.net WebAPI. Когда я получаю название города из внешнего интерфейса, я использую его для поиска города / аэропорта в базе данных. Затем я использую широту и длину аэропорта, чтобы вызвать API openweather. Я хочу использовать ответ для дальнейших расчетов и прогнозов.
Мой код:
HttpClient client = new HttpClient();
try
{
client.BaseAddress = new Uri("http://api.openweather.org");
var response = await client.GetAsync($"/data/2.5/weather?lat={airport.AirportLatitude}&lon={airport.AirportLongitude}&appid={apiKey}");
// var response = await // client.GetAsync($"/data/2.5/weather?q=London,uk&appid={apiKey}");
response.EnsureSuccessStatusCode();
var stringResult = await response.Content.ReadAsStringAsync();
var rawWeather = JsonConvert.DeserializeObject<OpenWeatherResponse>(stringResult);
System.Console.WriteLine("$$$$$$$$$$$After API call made$$$$$$$$$$$$$$$");
System.Console.WriteLine(response);
return Ok(new {
Temp = rawWeather.Main.Temp,
Summary = string.Join(",", rawWeather.Weather.Select(x=>x.Main)),
City = rawWeather.Name
});
// return Ok(response);
}
catch(HttpRequestException httpRequestException)
{
System.Console.WriteLine(httpRequestException.Message);
return BadRequest($"Error getting weather : {httpRequestException.Message}");
}
Когда я запускаю это приложение, иногда я получаю 400BadRequest, а иногда я получаю 500: Внутренняя ошибка сервера
1) Такой хост не известен.
2) System.InvalidOperationException: этот экземпляр уже запустил один или несколько запросов. Свойства могут быть изменены только перед отправкой первого запроса.
Startup.cs
services.AddTransient<HttpClient>();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
Когда я пытаюсь вставить полный URL-адрес openweather в свой браузер, он возвращает json, но выдает ошибку при попытке запуска из ASP.NET CORE Web Api Controller.
Любая помощь будет принята с благодарностью.
Заранее спасибо