Ich verwendete MultipartFormDataStreamProvider, um mehrteilige Anforderungen zu verarbeiten. Da ich die hochgeladene Datei im Speicher anstatt einer Datei speichern möchte, habe ich meinen Code geändert, um MultipartMemoryStreamProvider zu verwenden. Das Laden der Datei scheint gut zu funktionieren, aber ich bin nicht mehr in der Lage, auf andere Formularwerte zuzugreifen, die über provider.FormData
unter MultipartFormDataStreamProvider verfügbar waren. Könnte mir jemand zeigen, wie man das macht?Web-API: Wie kann man auf mehrteilige Formularwerte zugreifen, wenn MultipartMemoryStreamProvider verwendet wird?
Die rohe Anfrage von Fiddler erfasst:
POST http://myserver.com/QCCSvcHost/MIME/RealtimeTrans/ HTTP/1.1
Content-Type: multipart/form-data; boundary="XbCY"
Host: na-w-lxu3
Content-Length: 1470
Expect: 100-continue
Connection: Keep-Alive
--XbCY
Content-Type: text/plain; charset=utf-8
Content-Disposition: form-data; name=PayloadType
X12_270_Request_005010X279A1
--XbCY
Content-Type: text/plain; charset=utf-8
Content-Disposition: form-data; name=ProcessingMode
RealTime
--XbCY
Content-Type: text/plain; charset=utf-8
Content-Disposition: form-data; name=PayloadID
e51d4fae-7dec-11d0-a765-00a0c91e6fa6
--XbCY
Content-Type: text/plain; charset=utf-8
Content-Disposition: form-data; name=TimeStamp
2007-08-30T10:20:34Z
--XbCY
Content-Type: text/plain; charset=utf-8
Content-Disposition: form-data; name=SenderID
HospitalA
--XbCY
Content-Type: text/plain; charset=utf-8
Content-Disposition: form-data; name=ReceiverID
PayerB
--XbCY
Content-Type: text/plain; charset=utf-8
Content-Disposition: form-data; name=CORERuleVersion
2.2.0
--XbCY
Content-Disposition: form-data; name=Payload; filename=276_5010.edi
ISA*00*~SE*16*0001~GE*1*1~IEA*1*191543498~
--XbCY--
Mein Controller-Code:
string payload = null;
NameValueCollection nvc = null;
string fname = null;
StringBuilder sb = new StringBuilder();
sb.AppendLine();
foreach (StreamContent item in provider.Contents)
{
fname = item.Headers.ContentDisposition.FileName;
if (!String.IsNullOrWhiteSpace(fname))
{
payload = item.ReadAsStringAsync().Result;
}
else
{
nvc = item.ReadAsFormDataAsync().Result;
}
}
Danke Kiran für die Eingabe. Wenn ich versuche, was Sie vorgeschlagen haben, scheint es, die Zeile nicht zu mögen NameValueCollection nvc = erwarten content.ReadAsFormDataAsync(); aus irgendeinem Grund. Ich erhalte einen Fehler:. "ExceptionMessage: Es ist kein MediaTypeFormatter verfügbar, um ein Objekt vom Typ 'FormDataCollection' aus einem Inhalt mit dem Medientyp 'multipart/form-data' zu lesen". Irgendwelche Ideen? – user2434400
Ist dieser "Inhalt" genau so, wie ich oben erwähnt habe, das ist der Inhalt des Inhaltsarrays? Ich frage dies, weil Sie versuchen, den Inhalt der gesamten Anfrage zu lesen, anstatt den inneren Inhalt –
Ich versuchte beide: nvc = Request.Content.ReadAsFormDataAsync(). Ergebnis; und nvc = provider.Contents [0] .ReadAsFormDataAsync(). Result; Aber ich bekomme ähnliche Fehler. – user2434400