我正在構建一個 api 來將影像存盤為機器模型類的一部分,以便在 xamarin.forms 中使用它,所以這是機器類:
public class Machine
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public string Machine_Qr { get; set; }
public string Machine_Name { get; set; }
[NotMapped]
public string Image { get; set; }
}
這是機器控制器:
public class MachineController : ControllerBase
{
private readonly DataContext _context;
private IHostingEnvironment _hostingEnvironment;
public MachineController(DataContext context, IHostingEnvironment environment)
{
_context = context;
_hostingEnvironment = environment ?? throw new ArgumentNullException(nameof(environment));
}
[HttpPost]
public async Task<ActionResult<Machine>> Create(Machine machine)
{
if (ModelState.IsValid)
{
var files = HttpContext.Request.Form.Files;
foreach (var Image in files)
{
if (Image != null && Image.Length > 0)
{
var file = Image;
var uploads = Path.Combine(_hostingEnvironment.WebRootPath, "uploads\\img\\Machines");
if (file.Length > 0)
{
var fileName = ContentDispositionHeaderValue.Parse
(file.ContentDisposition).FileName.Trim('"');
System.Console.WriteLine(fileName);
using (var fileStream = new FileStream(Path.Combine(uploads, file.FileName), FileMode.Create))
{
await file.CopyToAsync(fileStream);
machine.Image = file.FileName;
}
}
}
}
_context.Add(machine);
await _context.SaveChangesAsync();
}
return CreatedAtAction(nameof(PostMachine), new { id = machine.Machine_Qr }, machine);
}
但是,當我嘗試以大搖大擺的方式測驗 api 時,我收到了這條訊息:
System.InvalidOperationException: Incorrect Content-Type: application/json
at Microsoft.AspNetCore.Http.Features.FormFeature.ReadForm()
at Microsoft.AspNetCore.Http.DefaultHttpRequest.get_Form()
at WebApi.Controllers.MachineController.Create(Machine machine) in C:\Users\amyra\source\repos\WebApi\Controllers\MachineController.cs:line 35
machineController 第 35 行是:
var files = HttpContext.Request.Form.Files;
uj5u.com熱心網友回復:
您應該在課堂上收到 Image 作為IFormFile屬性Machine
[NotMapped]
public IFormFile Image { get; set; }
然后[FromForm]在您的請求中使用屬性
[HttpPost]
public async Task<ActionResult<Machine>> Create([FromForm] Machine machine)
現在您可以洗掉這些行
var files = HttpContext.Request.Form.Files;
foreach (var Image in files)
{
}
并直接使用machine.Image您通過 Swagger 上傳的
var file = machine.Image;
if (file != null && file.Length > 0)
{
var fileName = ContentDispositionHeaderValue.Parse
(file.ContentDisposition).FileName.Trim('"');
System.Console.WriteLine(fileName);
using (var fileStream = new FileStream(Path.Combine(uploads, file.FileName), FileMode.Create))
{
await file.CopyToAsync(fileStream);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/483887.html
標籤:网 asp.net 核心 xamarin.forms
