ASP.NET MVC Core - использование API через HttpClient - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть решение Visual Studio с двумя проектами;API и MVC.MVC - это мой MVC-проект, содержащий мои представления и т. Д., API - это мой API-проект, содержащий API-конечные точки и логику.Поскольку у меня есть два проекта, я настроил в своем решении несколько проектов запуска.

HttpClient

public const string AuctionAPI = "http://localhost:44337/";
public const string AuctionClient = "http://localhost:44398/";

public static HttpClient GetClient()
{
    HttpClient client = new HttpClient();
    client.BaseAddress = new Uri(AuctionAPI);
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
    return client;
}

Контроллер MVC (Примечание: я получаюошибка в строке 6, когда я устанавливаю HttpResponseMessage и пытаюсь вызвать client.GetAsync ()

[Route("item/{itemNumber}")]
public async Task<IActionResult> IndexForItem(int itemNumber)
{
    var client = GetClient();
    //ERROR: In next line, HttpResponseMessage it tries to call my API controller and fails
    HttpResponseMessage response = await client.GetAsync($@"api/Auction/SeeOneItem/{itemNumber}");

    if (response.IsSuccessStatusCode)
    {
        string content = await response.Content.ReadAsStringAsync();
        var model = await response.Content.ReadAsAsync<AuctionItemProxy>();

        return View(model);
    }
    else
    {
        return Content("An error occured.");
    }
}

API Controller (обратите внимание: моя точка останова в этом методе никогда не достигает)

[HttpGet("SeeOneItem/{itemNumber:int}")]
public AuctionItem GetAuctionItem(int itemNumber)
{
    var item = _auctionItemDataFactory.AuctionItems.First(x => x.ItemNumber == itemNumber);
    if (item == null)
    {
        return null;
    }
    return _auctionItemDataFactory.AuctionItems.First(x => x.ItemNumber == itemNumber);
}

Фактическая ошибка, которую я получаю

IOException: Unable to read data from the transport connection

1 Ответ

0 голосов
/ 07 декабря 2018

Эта ошибка означает, что целевой компьютер доступен, но служба, к которой вы пытаетесь обратиться, недоступна.

Просматривая ваш код, которым вы поделились, я заметил одну вещь.Если проект настроен на использование Https, IIS Express назначает порты, начиная с 443, в результате чего получается порт, подобный 443xx.Измените схему http на https и повторите попытку.

public const string AuctionAPI = "http://localhost:44337/";

на

public const string AuctionAPI = "https://localhost:44337/";

ИЛИ

Измените настройки проекта нане использовать SSL

  1. Щелкните правой кнопкой мыши свой проект. Выберите свойства
  2. В окне свойств перейдите в раздел «Отладка»
  3. В разделе «Настройки веб-сервера» снимите флажок «Включить SSL»

Эта проблема также может быть связана с безопасностью транспортного уровня.

...