Как передать изображение через REST API?(Core 2.0 внутри) - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь создать приложение аутентификации с ASP.NET Core 2.0 и пытаюсь создать некоторые методы REST.Что я хочу сделать, это создать метод GET, который возвращает изображение профиля.Я получил это:

[Produces("application/json")]
public class UserController : Controller
{
    private readonly UserManager<ApplicationUser> _userManager;

    public UserProfileController(UserManager<ApplicationUser> userManager)
    {
        _userManager = userManager;
    }

    [HttpGet]
    public async Task<IActionResult> GetPicture(string username)
    {
        var user = await _userManager.FindByNameAsync(username);

        return Ok(user.Picture);
    }
}

И это действительно работает.Дело в том, что вызов этого метода возвращает строковое представление base64 моего изображения.Но я хочу получить само изображение.Затем я попытался изменить метод GetPicture на этот:

    [HttpGet]
    public async Task<IActionResult> GetPicture(string username)
    {
        var user = await _userManager.FindByNameAsync(username);

        var bytes = Convert.FromBase64String(user.Picture);
        Image image;
        using (var ms = new MemoryStream(bytes))
        {
            image = Image.FromStream(ms);
        }
        return Ok(image);
    }

Но он не работает, как я надеялся.Я предположил, что это проблема Content-type, поэтому я попытался изменить [Produces("application/json") на [Produces("image/jpeg") или что-то подобное.Но это не работает, так как возвращает мне ошибку 406: Недопустимо .У меня заканчиваются идеи, поэтому я спрашиваю вас, можете ли вы помочь мне с этой проблемой.Заранее спасибо!

1 Ответ

0 голосов
/ 04 июня 2018

Если вы хотите вернуть изображение, просто верните байты с соответствующим типом mime.Возвращение OkResult приведет к сериализации любого передаваемого объекта, а весь ответ будет отправлен как application/json, что, очевидно, не является изображением.Это все, что вам нужно:

[HttpGet]
public async Task<IActionResult> GetPicture(string username)
{
    var user = await _userManager.FindByNameAsync(username);
    var bytes = Convert.FromBase64String(user.Picture);
    return File(bytes, "image/jpeg");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...