Dotnet core WebAPI 2.1に取り組んでいますが、Bodyに画像を送信する方法が見つかりません。
コントローラは次のようになります。
[HttpPost("api/image")]
public IActionResult Post([FromBody]IFormFile file)
{
var filePath = Path.GetTempFileName();
if (file.Length > 0)
{
return Ok();
}
return BadRequest();
}
Kestrel
が失敗しているため、この呼び出しは終了しません
私はすでにConsumes
を使おうとしました
[Consumes("application/json", "application/json-patch+json", "multipart/from-data")]
また、郵便配達員では、Content-Typeをmultipart/form-dataに設定しました
このようにしてみてください。現在使用している郵便配達員で同じリクエストを使用します。これは単なる大まかな定型法ですが、あなたはその考えを理解します。
また、postmanのリクエストのヘッダーを次のように設定することを忘れないでください:Content-Type:multipart/form-data
[HttpPost]
[Route("api/image")]
public async Task<IHttpActionResult> InsertNewMerchant()
{
// your form data is here
var formData = HttpContext.Current.Request.Form;
HttpFileCollection files = HttpContext.Current.Request.Files;
if (files.Count == 1)
{
// this is the file you need
var image = files[0];
// do something with the file
}
return StatusCode(System.Net.HttpStatusCode.Created);
}
.Net Core 2.1/2.2のソリューションを見つけました ここ
[HttpPost]
public async Task<IActionResult> UploadSingleFile([FromForm(Name = "file")] IFormFile file)
{
if (!ModelState.IsValid)
return BadRequest(ModelState);
var IDsList = new IDsList();
try
{
var id = SaveFile(file);
IDsList.Files.Add(new IDsList.FileInfo() { id = id, fileName = file.FileName });
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
return Content(JsonConvert.SerializeObject(IDsList), "application/json");
}
[HttpPost("UploadFiles")]
public async Task<IActionResult> UploadFiles([FromForm(Name = "files")] ICollection<IFormFile> files)
{
if (!ModelState.IsValid)
return BadRequest(ModelState);
//var files = Request.Form.Files?.GetFiles("files");
String message = String.Empty;
int filesCounter = 0;
var IDsList = new IDsList();
foreach (var file in files)
{
if (file.Length == 0)
message = message + $"errorDescription {file.FileName}\n";
try
{
var id = SaveFile(file);
IDsList.Files.Add(new IDsList.FileInfo() { id = id, fileName = file.FileName });
filesCounter++;
}
catch(Exception ex)
{
message = $"{message}{ex.Message}\n";
}
}
IDsList.message = $"Amount: {filesCounter}.\n{message}";
return Content(JsonConvert.SerializeObject(IDsList), "application/json");
}
試してみましたが、うまくいきました。多分あなたは何かをするのを忘れます。 [FromBody]属性を削除します。
[HttpPost("api/image")]
public IActionResult Post(IFormFile file)
{
var filePath = Path.GetTempFileName();
if (file.Length > 0)
{
return Ok();
}
return BadRequest();
}
Postmanは自動的に正しいContent-Typeを添付し、本文セクションでform-dataオプションを選択し、fileキーを使用してファイルを追加します。
動作するはずです。
これが回答されたことは知っていますが、回避策を決定したようです。エンドポイントにもPostmanリクエストにも問題はありません。同じ問題が発生し、OSにネイティブPostmanをインストールすると、問題が解決しました https://www.getpostman.com/apps