You Can handle the situation with two scenario.
- You can use HttpContext.Current.Request
- Not required as you mentioned in model class byte[] property.
Ref. Link 1 : https://www.c-sharpcorner.com/UploadFile/2b481f/uploading-a-file-in-Asp-Net-web-api/
public class ValuesController: ApiController
{
[System.Web.Http.HttpPost]
public HttpResponseMessage PostComplex(TestAspDotNetModelClass update)
{
if (update.fileProfile != null)
{
HttpResponseMessage result = null;
var httpRequest = HttpContext.Current.Request;
if (httpRequest.Files.Count > 0)
{
var docfiles = new List<string>();
foreach (string file in httpRequest.Files)
{
var postedFile = httpRequest.Files[file];
var filePath = HttpContext.Current.Server.MapPath("~/" + postedFile.FileName);
postedFile.SaveAs(filePath);
docfiles.Add(filePath);
}
result = Request.CreateResponse(HttpStatusCode.Created, docfiles);
}
else
{
result = Request.CreateResponse(HttpStatusCode.BadRequest);
}
}
else
{
return Request.CreateResponse(HttpStatusCode.BadRequest);
}
}
}
- You can go with same as you mentioned byte[] that is not possible to create json thats why you can convert byte[] to Base64String then it is possible.
Ref. Link 2 : Saving a base64 string as an image into a folder on server using C# and Web Api
Model Class
public class TestAspDotNetModelClass
{
public int Id { get; set; }
public string Name { get; set; }
public string Base64Stringfile { get; set; }
}
API Controller Action
public class ValuesController: ApiController
{
[System.Web.Http.HttpPost]
public HttpResponseMessage PostComplex(TestAspDotNetModelClass update)
{
if (update.Base64Stringfile != null)
{
// Convert base 64 string to byte[]
byte[] fileBytes = Convert.FromBase64String(update.Base64Stringfile);
// Convert your byte[] to file
return Request.CreateResponse(HttpStatusCode.OK);
}
else
{
return Request.CreateResponse(HttpStatusCode.BadRequest);
}
}
}