Отправка содержимого файла из 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.
}

Просто начал изучать .NET и, следовательно, не знаю, если что-то не так в коде .NET.

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

Заранее спасибо.
Мужчина

2

Решение

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

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

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

0

Другие решения

Других решений пока нет …