Как загрузить объект модели в API с данными формы в asp. net Web Api - PullRequest
0 голосов
/ 21 июня 2020

Класс модели :

public class TestAspDotNetModelClass
{
    public int Id { get; set; }
    public string Name { get; set; }
    public byte[] file { get; set; }
}

Действие контроллера API :

public class ValuesController: ApiController
{
    [System.Web.Http.HttpPost]
    public HttpResponseMessage PostComplex(TestAspDotNetModelClass update)
    {
        if (update.fileProfile != null)
        {               
            return Request.CreateResponse(HttpStatusCode.OK);
        } 
        else
        {
            return Request.CreateResponse(HttpStatusCode.BadRequest);
        }
    }
}

Сообщение файла и значения в почтальоне объект сообщение в API, но сообщение API показывает эту ошибку

1 Ответ

0 голосов
/ 21 июня 2020

Вы можете справиться с ситуацией с помощью двух сценариев.

  1. Вы можете использовать HttpContext.Current.Request
  • Не требуется, как вы упомянули в свойстве байта [] класса модели.

Ref. Ссылка 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);
        }
    }
 }

Вы можете go с таким же, как вы упомянули, byte [], который невозможно создать json, поэтому вы можете преобразовать byte [] в Base64String , тогда это возможно.

Арт. Ссылка 2: Сохранение строки base64 как изображения в папке на сервере с использованием C# и веб-API

Класс модели

public class TestAspDotNetModelClass
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Base64Stringfile { get; set; }
}

Действие контроллера API

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);
        }
    }
}
...