c# - 如何通过 REST API 传输图像?(内有Core 2.0)
问题描述
我正在尝试使用 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);
}
但它并没有像我希望的那样工作。我认为这是内容类型的问题,所以我尝试将其更改[Produces("application/json")
为[Produces("image/jpeg")
或类似的东西。但它不起作用,因为它给了我一个406 Error: Not Acceptable。我的想法不多了,所以我问你是否可以帮助我解决这个问题。先感谢您!
解决方案
如果您想要返回图像,则只需返回具有适当 mimetype 的字节。返回 anOkResult
将导致您传入的任何对象都被序列化,并将整个响应发送为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");
}
推荐阅读
- angular - 在另一个 angular-cli(7)(库)项目中覆盖自定义 scss 变量
- plot - 如何在自相关图中扩展 y 轴范围?
- javascript - 如何在依赖外部依赖的 vue.js 中对组件进行单元测试?
- javascript - 无法正确填充 state 中的属性以在 FlatList 的 renderItem 中使用它
- python - Python 在列表上使用 len 时,如何解决 < 的 TypeError?
- javascript - 如何删除 youtube 视频的名称?
- django - 在 django SignupForm 注册方法没有被覆盖
- python - 单击页面按钮后如何防止 Django 表单被重置
- javascript - 使用反应实现页脚不停留在底部
- python - 尝试使用条目小部件启用按钮