Ho usato MultipartFormDataStreamProvider per elaborare richieste multipart. Poiché desidero che il file caricato sia archiviato in memoria, anziché un file su disco, ho modificato il mio codice per utilizzare MultipartMemoryStreamProvider. Il caricamento dei file sembra funzionare correttamente ma non sono più in grado di accedere a altri valori del modulo che erano disponibili tramite provider.FormData
in MultipartFormDataStreamProvider. Qualcuno potrebbe mostrarmi come farlo?: come accedere ai valori dei moduli multipart quando si utilizza MultipartMemoryStreamProvider?
La richiesta grezzo catturato dai Fiddler:
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--
Il mio codice di controllo:
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;
}
}
Grazie Kiran per l'input. Quando provo ciò che hai suggerito, non sembra che la riga NameValueCollection nvc = attenda content.ReadAsFormDataAsync(); per qualche motivo. Sto ricevendo errore:. "ExceptionMessage: No MediaTypeFormatter è disponibile per leggere un oggetto di tipo 'FormDataCollection' dal contenuto con tipo di supporto 'multipart/form-data'". Qualche idea? – user2434400
Questo 'contenuto' è proprio come ho menzionato sopra, cioè il contenuto della matrice di contenuti? lo chiedo perché sembra che tu stia cercando di leggere il contenuto dell'intera richiesta piuttosto che il contenuto interno –
Ho provato entrambi: nvc = Request.Content.ReadAsFormDataAsync(). Risultato; e nvc = provider.Contents [0] .ReadAsFormDataAsync(). Risultato; Ma sto ottenendo errori simili. – user2434400