我已经创建了一个API,它正在数据库中添加数据,带有值和图像。
在postman中,我调用了它,并在表单中设置了image-data和JSON中的其他原始值,但在image中,我仍然在源代码对象中得到了空值。
我需要两件事的帮助:
1.为什么我在源代码中的图像值为空,请检查下面的图像。
1.我如何发送图像和数据使用 Postman ,检查下面的截图是确定我已经尝试了什么?
第一个屏幕截图是postman,我在其中以json格式发送数据:
第二个屏幕截图是 Postman ,我在 Postman 的同一个请求中发送图像
现在在第三个图像中,您可以看到在图像中,它显示的是Null而不是值。
所以我不明白为什么图像是空的..下面是代码
public async Task<int> Create(UserPreference _object)
{
if(_object.Image != null)
{
var webRootPath = hostingEnv.WebRootPath;
var fileName = Path.GetFileName(_object.Image.FileName);
var filePath = Path.Combine(hostingEnv.WebRootPath, "images\\User", fileName);
using(var fileStream = new FileStream(filePath, FileMode.Create))
{
await _object.Image.CopyToAsync(fileStream);
}
_object.ImagePath = filePath;
}
var obj = await applicationDbContext.UserPreferences.AddAsync(_object);
return applicationDbContext.SaveChanges();
}
[HttpPost]
[Route("CreateUserPreference")]
public async Task<ActionResult> CreateUserPreference([FromBody] UserPreference userPreference)
{
if (ModelState.IsValid)
{
try
{
var userPreferenceId = await _userPreference.Create(userPreference);
if (userPreferenceId > 0)
return Ok("User Preference has added");
}
catch(Exception)
{
return BadRequest();
}
}
return BadRequest();
}
[Display(Name = "Name")]
public string Name { get; set; } = "";
[Display(Name = "Location")]
public string Location { get; set; } = "";
[Display(Name = "Date of Birth")]
public DateTime DateOfBirth { get; set; }
[Display(Name = "About Me")]
public string AboutMe { get; set; } = "";
[Display(Name = "Match Preference")]
public string MatchPreference { get; set; } = "";
[Display(Name = "Play Score")]
public string PlayScore { get; set; } = "";
[Display(Name = "Location")]
public string LocationPreference { get; set; } = "";
[Display(Name = "CreatedOn"), DataType(DataType.Date)]
public DateTime CreatedOn { get; set; } = DateTime.Now;
[Display(Name ="Upload Photo")]
public string ImagePath { get; set; } = "";
[NotMapped]
public IFormFile Image { get; set; }
[ForeignKey("User")]
public int UserId { get; set; }
public virtual User User { get; set; }
4条答案
按热度按时间h7appiyu1#
x1c 0d1x您不能同时发送form-data和JSON正文。要解决您的问题,请将图像和其他信息作为form-date发送。有关详细信息,请参阅屏幕截图
72qzrwbm2#
若要使用Postman发送图像和数据,必须使用表单数据内容类型。
选择body =〉form-data。列键有一个选择器。对于文件,选择file-type和选择file。要同时发送数据,你必须在键值对中分隔json。
并从动作中移除[FromBody]属性,它只用于Content-Type:application/json,但您的内容类型:多部分/表格数据;
q1qsirdb3#
Postman不允许您像这样同时发送两种不同的表单类型。您的问题是发送JSON有效负载 * 或 * 图像的二进制内容。
因此,请将file * 和 * JSON有效负载添加到form-data屏幕,如下所示:
Postman将自动设置
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
头,然后处理实际正文,如下所示:k2arahey4#
[ASP.NET核心框架]
假设你想在body请求中发送一个文件(图像),在同一个body中包含更多的属性,在这种情况下,我强烈建议在API中的object参数之前使用属性[FromForm],比如下面的例子:
如果你想通过post-man测试你的API,你必须使用body和form-data类型。对于你的文件/图像给予属性名,并在键端选择“文件”类型,在值端,通过点击“选择文件”选择文件,对其他属性执行相同的操作,键=属性名,值为它们的值(可以是字符串、双精度型......等等)。如下例所示: