将php脚本翻译为c#httpClient

问题描述

我需要帮助将示例PHP代码转换为C#代码。不幸的是,现有文档描述得很差,仅用于PHP。但是,我需要通过C#HttpClient访问。我当前的c#testscript在json序列化json模型中传输数据。这也可以。但是,一旦我尝试传输文件,就会收到错误消息。在PHP脚本中,仅添加了文件,我认为它只是作为字节[]传输了。如果我尝试将文件作为字节[]进行传输,则会出现错误500。如果我尝试将文件作为多部分进行传输,则会被禁止。我必须如何正确传输文件,以使其被REST API接受。不幸的是,测试总是有些困难,因为我总是必须打电话给制造商,并询问现在是否已正确传输了所有内容。制造商始终仅引用doku和curl脚本,这些脚本现在可以使用。 所以现在的主要问题是CURLFILE如何工作,命令返回什么?

在数据库中,字段类型只是附件。不幸的是,我在这里没有更多信息。

有人可以帮忙吗?

更新

我现在查看了PHP文档中的CURLFILE。这里会

  • 名称
  • 哑剧
  • 邮政名 通过

mime类型为application / octet-stream

PHP脚本

<?php

$data = '{
        "username": "xx","password": "hgertr"
    }';

$headers = [
    'Accept: application/json','Content-Type: application/json',];

$url = 'https:/xxx/sessions';

$curlHandle = curl_init();
curl_setopt($curlHandle,CURLOPT_HTTPHEADER,$headers);
curl_setopt($curlHandle,CURLOPT_URL,$url);
curl_setopt($curlHandle,CURLOPT_RETURNTRANSFER,true);
curl_setopt($curlHandle,CURLOPT_POST,1);
curl_setopt($curlHandle,CURLOPT_POSTFIELDS,$data);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,20);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($curlHandle,CURLOPT_COOKIEJAR,'C:\cookie');

$response = curl_exec($curlHandle);

$code = curl_getinfo($curlHandle,CURLINFO_HTTP_CODE);

if ($code === 201) {
    $response = json_decode($response,true);
    $sessionId = $response['sessions'][0]['sessionId'];
} else {
    echo 'Fehler beim Authentifizieren: ' . $code;
    var_export($response);
    var_export(curl_error($curlHandle));
}

curl_reset($curlHandle);


$fileForFirstRow = new CURLFile('abc.pdf');


$inputData = [
    'step' => '10','subtables[0][name]' => 'ST_SR_PDF','subtables[0][rows][0][fields][0][name]' => 'DEADLINE','subtables[0][rows][0][fields][0][value]' => 15,'subtables[0][rows][0][fields][1][name]' => 'DOC_DESC','subtables[0][rows][0][fields][1][value]' => 'wert1','subtables[0][rows][0][fields][2][name]' => 'DOC','subtables[0][rows][0][fields][2][value]' => $fileForFirstRow,'subtables[1][name]' => 'ST_SR_USER','subtables[1][rows][0][fields][0][name]' => 'SIGNATORY_PRE_NAME','subtables[1][rows][0][fields][0][value]' => 'hans','subtables[1][rows][0][fields][1][name]' => 'SIGNATORY_LAST_NAME','subtables[1][rows][0][fields][1][value]' => 'wert1',];
curl_reset($curlHandle);

curl_setopt($curlHandle,'https://xxx.xx/jr_signature_rest');
curl_setopt($curlHandle,$inputData);
curl_setopt($curlHandle,CURLOPT_COOKIEFILE,'C:\cookie');

$response = curl_exec($curlHandle);
$statusCode = curl_getinfo($curlHandle,CURLINFO_HTTP_CODE);

我当前的c#代码。

c#

 using (var client = new HttpClient()) {
   client.DefaultRequestHeaders
   .Accept
   .Add(new MediaTypeWithQualityHeaderValue("application/json"));

    string fileName = "e:\\xxx.pdf";
    byte[] buff = File.ReadAllBytes(fileName);

    string workflowID = "";
                
    LoginInformation loginInformation = new LoginInformation();
    loginInformation.username = "xx";
    loginInformation.password = "xdsf";

    var LoginAsString = JsonConvert.SerializeObject(loginInformation);

var LoginDataContent = new StringContent(LoginAsString,Encoding.UTF8,"application/json");

     HttpResponseMessage result = await client.PostAsync("xx/sessions",LoginDataContent);

  var fieldlist = new List<DokFields>();

  
  fieldlist.Add(new DokFields { name = "DEADLINE",value = 28 });
  fieldlist.Add(new DokFields { name = "DOC_DESC",value = "VERTRAG" });
  fieldlist.Add(new DokFields { name = "DOC_NAME",value = "xxx.pdf" });
  fieldlist.Add(new DokFields { name = "DOC_TYPE",value = 2 });
  fieldlist.Add(new DokFields { name = "SIGNATURE_TYPE",value = 2 });
  fieldlist.Add(new DokFields { name = "SMS_OTP",value = 0 });
  fieldlist.Add(new DokFields { name = "DOC",value = buff) });




  DokFieldList jsonFields = new DokFieldList();
  jsonFields.fields = fieldlist;

  var jsonFieldsList = new List<DokFieldList>();

  jsonFieldsList.Add(jsonFields);

  var SubtablesList = new List<Subtables>();
  Subtables subtable_ST_SR_PDF = new Subtables();
  subtable_ST_SR_PDF.name = "ST_SR_PDF";
  subtable_ST_SR_PDF.rows = jsonFieldsList;
  SubtablesList.Add(subtable_ST_SR_PDF);


  var UserList = new List<Field>();
  var UserFelderPartner1 = new List<DBFeld>();
  UserFelderPartner1.Add(new DBFeld { name = "SIGNATORY_PRE_NAME",value = "pre 1" });
   UserFelderPartner1.Add(new DBFeld { name = "SIGNATORY_LAST_NAME",value = "last 1" });
  UserFelderPartner1.Add(new DBFeld { name = "SIGNATORY_MAIL",value = "xxxx" });
  UserFelderPartner1.Add(new DBFeld { name = "MOBILE_SMS_OTP",value = "yyyyyy" });
  Field P1 = new Field();
  P1.fields = UserFelderPartner1;
  UserList.Add(P1);


  var SubtableUserList = new List<SubtablesUser>();
  SubtablesUser subtable_ST_SR_USER = new SubtablesUser();
  subtable_ST_SR_USER.name = "ST_SR_USER";
  subtable_ST_SR_USER.rows = UserList;

  SubtableUserList.Add(subtable_ST_SR_USER);

  List<Object> all = (from x in SubtablesList select (Object)x).ToList();
   all.AddRange((from x in SubtableUserList select (Object)x).ToList());


 Step step = new Step();
 step.step = 10;
 step.subtables = all;

 var stepsAsString = JsonConvert.SerializeObject(step);
 var stepsContent = new StringContent(stepsAsString,"application/json");
                        

 HttpResponseMessage responseSteps = await client.PostAsync("xxx/jr_signature_rest",stepsContent);
}

如果我不带文件上传行运行脚本,则数据已正确传输到REST API,并且值也可用。如果我尝试让数据与文件上传一起运行,服务器将返回服务器错误500。

fieldlist.Add(new DokFields { name = "DOC",value = buff) });

上传数据c#

传输的数据为json。

{"step":10,"subtables":[{"name":"ST_SR_PDF","rows":[{"fields":[{"name":"DEADLINE","value":28},{"name":"DOC_DESC","value":"VERTRAG"},{"name":"DOC_NAME","value":"xxx.pdf"},{"name":"DOC_TYPE","value":2},{"name":"SIGNATURE_TYPE",{"name":"SMS_OTP","value":0},{"name":"DOC","value":"JVBERi0xLjMKJcTl8uXrp/Og0MTGCjQgMCBvYmoKPDwgL0xlbmd0aCA1IDAgUiAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAG9W1uX3DgRfvevcKZz6Z5Me6yLbTmwLJvsAhsuu2EH9oHmgTMne4CTAJvA/+crXUqy5elY3Q0nD86o5ZJUqvrqq5L8Y/2m/rEeRKPGtq9N2zetGGX9vtaya3qVtr2LbUMnmrZDv3f8amiq3tV/rb+v/1Hfvvoo6vuPdWv/fbzHMG0jtfub/mPcmL0STU+y7t/XL+/qfdu0rejqu/tK97YzHtLoZhzHvu6Nqu/e17d3d7IW9d0P9Z/q7aOrzeNdvRf1dvNkh9btU/fXs8P2sLve1bLePt9VaL+xv+4P2ybtdouG52mD+6N1QvzDtbn3MFpFo4n8JT+PK+n6b5R7Xu3qP9d3r+uv7qy2j6qhcmqIaxdtpxoz6nzttNC7v5dI7dxm4BE1KmcavYjUrpf5PkGjbaPq7WG7gynoeittC20cNsi2aNvS1Vv8Z7XKvOXExWnRNuOAKWAa1dxcsCV2KGwKpoNZkLm0DWbRhZbQhSfqu1Rxxn3oyzOmvW8bTB2LcSOwYDIibHq9HcJbkOwWjD6nr3PQXSOHYczXSWtZaRqp37Wa/C4qcgAwdHrQNEC2n89Jg1BbyRK8dccRjFLwbNMvjmCC3g67zWE3svJ23nAqctzpHj6znbALvB28idHazpqxEEo3plOLM34xNy4eFEtQu+r0vRZyADJ2xg9bRQhMHZbAPEfu93UnNSxliuahr...more Data...hcnR4cmVmCjg0MDA2CiUlRU9GCg=="}]}]},{"name":"ST_SR_USER","rows":[{"fields":[{"name":"SIGNATORY_PRE_NAME","value":"pre 1"},{"name":"SIGNATORY_LAST_NAME","value":"last 1"},{"name":"SIGNATORY_MAIL","value":"xxxx"},{"name":"MOBILE_SMS_OTP","value":"yyyyyy"}]},{"fields":[{"name":"SIGNATORY_PRE_NAME","value":"pre 2"},"value":"last  2"},"value":"yyyyy"}]}]}]}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...