从php curl(使用post)发送文件内容到c#webapi

时间:2015-06-09 08:09:23

标签: c# php asp.net curl asp.net-web-api

我必须将文件对象从php传输到c#webapi。 不知何故,在c#中,文件内容为Null。 这是取出其他东西后的部分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#控制器代码&amp;型号代码

 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 webservice,这是一个单独的应用程序。

提前致谢。 阿曼

1 个答案:

答案 0 :(得分:0)

从您的代码设备中,我发现发布的fileContentstring,您尝试将其作为byte[]接收。您应该将CrmUploadFileModel.fileContent的类型更改为string,并且它应该工作。 请参阅下面的注释

由于您未显示路线配置,因此我不知道您的投放操作中是否缺少[HttpPost]属性是另一个问题。如果您在代码中添加它,它不会造成任何伤害,我们可以放弃此问题(事实上,如果您的调试器进入Post操作,这不是问题)。

注意:如果要发布和接收字节数组,则无法直接在JSON对象中执行此操作,除非您在客户端中将其编码为字符串并在服务器中对其进行解码。如果你仍然希望发送一个字节数组,你不能指望自动参数绑定,你必须做额外的工作:How to Get byte array properly from an Web Api Method in C#?正如你在Q&amp; A中看到的那样,你必须将整个发布值转换为{ {1}},所以发送几个属性更难做(你必须手工解析数组)。