Вызов веб-API от зависания контроллера MVC - PullRequest
0 голосов
/ 22 октября 2018

За последние пару часов я пробовал много разных подходов, но мой вызов метода зависает.

Вот мой код веб-API, который прекрасно работает при выполнении AJAX-вызова от клиента MVC, но я пытаюсь проверить вызов с сервера:

// GET api/values
[HttpGet]
public IEnumerable<string> Get()
{
    return new string[] { "value1", "value2" };
}

Ниже мой MVCкод контроллера и код модели:

public async Task<ActionResult> TestApi()
{
    try
    {
        var result = await VoipModels.GetValues();

        return MVCUtils.JsonContent(result);
    }
    catch (Exception ex)
    {
        return MVCUtils.HandleError(ex);
    }
}
...
    public static async Task<string[]> GetValues()
    {
        string[] result = null;

        using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri("http://localhost:44305/api/");

            //THIS IS THE LINE THAT HANGS UP - I'VE TRIED MANY VARIATIONS
            var response = await client.GetAsync("values", HttpCompletionOption.ResponseHeadersRead).ConfigureAwait(false);

            if (response.IsSuccessStatusCode)
            {
                result = await response.Content.ReadAsAsync<string[]>();
            }
            else
            {
                throw new Exception(response.ReasonPhrase);
            }
        }

        return result;
    }

Я успешно использовал этот формат при вызове отдельного стороннего API.У меня закончились примеры, чтобы попробовать свои пару часов поиска в Google.

Что я здесь не так делаю?

1 Ответ

0 голосов
/ 22 октября 2018
  1. Проверьте номер вашего порта. Исходя из вашего кода, вы "жестко закодировали" порт "http://localhost:44305/api/", что, вероятно, неверно, вы должны преобразовать его, чтобы получить его из конфигурации хоставместо этого.
  2. Проверьте брандмауэр локального компьютера. Убедитесь, что брандмауэр локального компьютера разрешает подключения к назначенному порту.
  3. Проверьте свой протокол. Убедитесь, что вы используете http или https соответствующим образом в URL-адресе запроса.

В качестве особого примечания, есть очень редкие случаи / исключительные случаи, когда вы хотите, чтобы сам сервер веб-API вызывал сам себя.Это довольно неэффективный дизайн, поскольку он потребляет ресурсы без выгоды (например, при создании запроса и ответа).

...