Web-Api-Anfrage Wirft "Fehler beim kopieren der Inhalte in einem stream."
Ich versuche, dies umzusetzen code-Beispiel, aber eine HttpRequestException
- "Fehler beim kopieren der Inhalte in einem stream." wenn die ReadAsStringAsync()
- Methode aufgerufen wird. Die innere Ausnahme ist "Nicht auf einen entsorgt Objekt." Ich bin mit Fiddler die Anfrage zu machen. Ich verstehe es nicht. Kann jemand erklären, warum ich immer diese Ausnahme und bieten eine Lösung?
Web-Api-Methode:
public async Task<HttpResponseMessage> Post(HttpRequestMessage request)
{
try
{
var jsonString = await request.Content.ReadAsStringAsync();
}
catch (Exception ex)
{
throw;
}
return new HttpResponseMessage(HttpStatusCode.Created);
}
Fiddler (POST):
User-Agent: Fiddler
Host: localhost:23567
Content-Length: 18
Content-Type: application/json; charset=utf-8
Body{"Test":1}
Edit:
Ich habe eine Ahnung, aber müssen Verifikation. Auf der Web-Api-controller, ich habe eine ActionFilterAttribute
und in seiner OnActionExecuting
überschreiben, da gibt es diese Zeile:
public override async void OnActionExecuting(HttpActionContext actionContext)
{
//omitted code
actionContext.Request.Content.ReadAsStreamAsync();
}
Könnte es sein, dass da der Inhalt hier gelesen, es ist nicht wieder verfügbar? Wenn ja, wie kann ich in der Methode? Der Inhalt ist hier die gleiche wie die HttpRequestMessage? Diese enthalten kann, eine Antwort.
- Wie rufst du diese Methode?
- mit Fiddler
- Ist diese Methode ein Web-API-Aktion?
- es ist eine Methode, die auf einer Web-Api-controller
- siehe mein edit, danke
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur eine Vermutung, sollte die post als Kommentar, aber ich möchte, gehören ein code-snippet:
Vielleicht rufen Sie
Post
Funktion innerhalb einerusing
block, aber nicht verwendenawait
.Ist oder Sie nicht entsorgen alte richtig angeschlossen ist.
Versuchen Sie auch, das hinzufügen
HttpVersion.Version10
Ihrem Antrag, die änderung headeranforderung vonConnection: keep-alive
zuConnection: close
, die Ursache Ausnahme in einem bestimmten Fall verwenden Sie ein host (Suche nach mehr info)Weil der controller
ActionFilterAttribute's
OnActionExecuting
Methode ruftReadAsStreamAsync
kann der Inhalt nicht gelesen werden, wieder. Ich änderteReadAsStreamAsync
zuReadAsStringAsync
- und request-Inhalte im controller vorhanden ist. Offenbar, ReadAsStringAsync Puffer den Inhalt, so dass es noch verfügbar. Diese link die Antwort.Ich hoffe, dass in diesem (späten) post jemandem helfen, eines Tages...
Kurz gesagt: akzeptiert die Antwort lässt vermuten, Lesen Sie die gesamte Datei als string (und nicht als stream), um die bypass-ein lese-problem
DOCH... Lesen einer Datei als ein string ist nicht so eine tolle Idee
Ich herausgefunden, dass das ersetzen von MultipartFormDataStreamProvider mit MultipartMemoryStreamProvider funktioniert Super - und lassen Sie Sie Lesen Ihre hochgeladene Datei wie gewünscht
Mein code (zumindest die relevanten Teile davon)