问题描述
我需要帮助将示例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 (将#修改为@)