Как заставить работать запрос Get к Image API? - PullRequest
0 голосов
/ 09 апреля 2020

Я понятия не имею, в чем проблема, поэтому я просто дам вам некоторый контекст:

Мой метод Api GET:

[Route("{name}", Name = "GetImageByName")]
    public IActionResult Get(string name)
    {
        string imagePath = GetImagePath();
        string fileName = $"{imagePath}\\{name}";

        if (!System.IO.File.Exists(fileName))
            return NotFound();

        try
        {
            var image = System.IO.File.ReadAllBytes(fileName);

            string extension = new FileInfo(fileName).Extension.Substring(1);
            return File(image, $"image/{extension}");
        }
        catch (ArgumentException ex)
        {
            return BadRequest(ex.Message);
        }
        catch (PathTooLongException ex)
        {
            return StatusCode(414, ex.Message);
        }
        catch (DirectoryNotFoundException ex)
        {
            return NotFound(ex.Message);
        }
        catch (UnauthorizedAccessException)
        {
            return Unauthorized();
        }
        catch (FileNotFoundException ex)
        {
            return NotFound(ex.Message);
        }
        catch (NotSupportedException ex)
        {
            return StatusCode(415, ex.Message);
        }
        catch(Exception ex)
        {
            return StatusCode(500, ex.Message);
        }
    }

Это прекрасно работает в почтальоне: запрос GET : https://localhost: 44355 / api / Images / Sheet1.png Возвращает 200 OK и изображение

Но с. net .http httpclient не работает:

var uri = new Uri("https://localhost:44355/api/Images/Sheet1.png");
        var response = await _httpClient.GetAsync(uri); //Not working and throws exception

Я также пытался загрузить изображения из моего API:

public async Task<BitmapImage> GetImage(string imageStringName)
    {
        var uri = new Uri("https://picsum.photos/200/300");

        BitmapImage bitmapImage = new BitmapImage();

        var rass = RandomAccessStreamReference.CreateFromUri(uri);
        using (IRandomAccessStream stream = await rass.OpenReadAsync())
        {
            bitmapImage.SetSource(stream);
        }

        return bitmapImage;
    }

Это прекрасно работает с внешним фиктивным API, но не с моим локальным API.

мой последний вопрос: почему не работает последнее решение для получения изображения из моего API? Почему не работает обычный _httpClient.GetAsyn c (Uri)? И каково на самом деле лучшее решение для получения изображений из API?

1 Ответ

0 голосов
/ 10 апреля 2020

UWP не может получить доступ к localhost по умолчанию. Обратитесь к разделу «Loopback» этого документа MSDN для получения информации о том, как включить его.

...