Вызов веб-API в программе MVC - PullRequest
0 голосов
/ 25 сентября 2018

Я создал веб-API для получения дневной температуры от OpenWeatherAPI.

Теперь я хочу отобразить все на своей веб-странице MVC.Я поместил вызов API в проект MVC;планируем создать новый проект позже для улучшения микросервисной архитектуры.

Я вижу эти ошибки в окнах отладки и MVC html со следующим.Как узнать погоду, температуру и т. Д., Количество осадков, отображаемое на html.

Debug: weathercontroller.City("Seattle")    The function evaluation requires all threads to run.    System.Threading.Tasks.Task<Microsoft.AspNetCore.Mvc.IActionResult>"

HTML: System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1+AsyncStateMachineBox`1[Microsoft.AspNetCore.Mvc.IActionResult,WeatherChecker.Controllers.WeatherController+<City>d__0]"

MVC Страница:

namespace WeatherPage.Controllers
{
    public class HomeController : Controller
    {

        public WeatherController weathercontroller = new WeatherController();

        public IActionResult Index()
        {
            return View();
        }

        public IActionResult About()
        {
            ViewData["Message"] = "Your application description page.";
            ViewData["test"] =  weathercontroller.City("Seattle");
            return View();
        }

Контроллер API:

[Route("api/[controller]")] 
public class WeatherController : ControllerBase
{
    [HttpGet("[action]/{city}")]
    public async Task<IActionResult> City(string city)
    {

        Rootobject rawWeather = new Rootobject();
        using (var client = new HttpClient())
        {
            try
            {
                client.BaseAddress = new Uri("http://api.openweathermap.org");
                var response = await client.GetAsync($"/data/2.5/weather?q={city}&appid=APIkey&units=metric");
                response.EnsureSuccessStatusCode();

                var stringResult = await response.Content.ReadAsStringAsync();
                rawWeather = JsonConvert.DeserializeObject<Rootobject>(stringResult);
                return Ok(rawWeather);
            }
            catch (HttpRequestException httpRequestException)
            {
                return BadRequest($"Error getting weather from OpenWeather: {httpRequestException.Message}");
            }
        }
    }




public class Rootobject
{
    public Coord coord { get; set; }
    public Weather[] weather { get; set; }
    public string _base { get; set; }
    public Main main { get; set; }
    public int visibility { get; set; }
    public Wind wind { get; set; }
    public Clouds clouds { get; set; }
    public int dt { get; set; }
    public Sys sys { get; set; }
    public int id { get; set; }
    public string name { get; set; }
    public int cod { get; set; }
}

Это работаетв моем проекте: https://localhost:55555/api/weather/city/washington

Извлечение данных от сторонних разработчиков Openweather Api

Должны ли мы вызывать Web Api из приложения Mvc в том же решении

1 Ответ

0 голосов
/ 25 сентября 2018

Вам не хватает ожидающего состояния, когда вы вызываете действие API.

Ваш код должен выглядеть следующим образом:

ViewData["test"] =  await weathercontroller.City("Seattle");
return View();

Вам необходимо изменить контроллер на асинхронный, чтобы онможет ожидать метода и быть прочитанным системой как асинхронный метод.Ваш код должен выглядеть так:

public async Task<IActionResult> About()
{
    ViewData["Message"] = "Your application description page.";
    ViewData["test"] = await weathercontroller.City("Seattle");
    return View();
}
...