Отправка содержимого файла из php curl (с помощью post) в c# webapi


Мне нужно перенести файловый объект из php в c# webapi. Каким-то образом в c# содержимое файла становится нулевым. Это частичный PHP-код после удаления других материалов

 <?php
 $fileContents =  file_get_contents($_FILES['fileToUpload']['tmp_name']); 

    $uploadFile = new UploadFile();  //custom object
    $uploadFile->fileName = "test";  //string
    $uploadFile->fileContent = $fileContents; //string


    $data_string=json_encode($uploadFile);

    $url="http://localhost:62672/api/uploadfile";

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch,CURLOPT_VERBOSE, TRUE);
    //curl_setopt($ch, CURLOPT_PORT, 801);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");

    curl_setopt($ch, CURLOPT_POSTFIELDS,$data_string);

    curl_setopt($ch, CURLINFO_HEADER_OUT, TRUE);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            'Content-Type: application/json',

    ));

?>

А вот код контроллера c# и код модели

 public class CrmUploadFileModel
    {
        public string fileName { get; set; }
        public byte[] fileContent { get; set; }


    }
public class UploadFileController : BaseController
    {

        public IHttpActionResult Post([FromBody]CrmUploadFileModel value)
        {
// here .. i find that the value.fileContent is null. 
}

Только начал учиться.ЧИСТАЯ и, следовательно, не знаю, что-то не так в.ЧИСТЫЙ код.

Используя тот же PHP-код, я могу успешно отправить содержимое файла в веб-сервис .NET, который является отдельным приложение.

Заранее благодарю. Аман

Author: Soner Gönül, 2015-06-09

1 answers

Из ваших подтверждений кода я вижу, что отправленный fileContent является string, и вы пытаетесь получить его как byte[]. Вы должны изменить тип CrmUploadFileModel.fileContent на string, и это должно сработать. См. Примечание ниже.

Поскольку вы не показываете конфигурацию маршрута, я не знаю, является ли отсутствие атрибута [HttpPost] в вашем действии после публикации еще одной проблемой. Если вы добавите его в свой код, это не повредит, и мы сможем устранить эту проблему (на самом деле, если ваш отладчик введет действие Post, это не проблема).

Примечание: Если вы хотите опубликовать и получить массив байтов, вы не можете сделать это непосредственно в объекте JSON, если только вы не закодируете его в клиенте в виде строки и не декодируете на сервере. Если вы все еще хотите отправить массив байтов, вы не можете ожидать автоматической привязки параметров, и вам придется выполнить дополнительную работу: Как правильно получить массив байтов из метода веб-Api в C#? Как вы можете видеть в этом вопросе, вам нужно преобразовать все опубликованное значение в byte[], поэтому отправка несколько свойств сделать еще сложнее (вам придется анализировать массив вручную).

 0
Author: JotaBe, 2017-05-23 11:51:09