Erste vollständige Antwort Körper aus dem System.Net.WebRequest
Ich bin mit System.Net.WebRequest, um Informationen aus einigen API.
Wann bekomme ich eine Fehlermeldung, die Antwort enthält nur die grundlegenden HttpStatusCode und Nachricht, und nicht der ganze Fehler zurückgegeben.
Zum Vergleich, die gleiche post-Daten und Header in einem tool, zum Beispiel als POSTBOTE wird wieder die vollständige Fehlermeldung aus, dass die API.
Ich mich Fragen, ob es irgendeine Eigenschaft oder Art und Weise kann ich die komplette Fehlermeldung als Antwort??
Hier ist der code, den ich verwende:
public HttpStatusCode GetRestResponse(
string verb,
string requestUrl,
string userName,
string password,
out string receiveContent,
string postContent = null)
{
var request = (HttpWebRequest)WebRequest.Create(requestUrl);
request.Method = verb;
if (!string.IsNullOrEmpty(userName))
{
string authInfo = string.Format("{0}:{1}", userName, password);
authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
request.Headers.Add("Authorization", "Basic " + authInfo);
}
if (!string.IsNullOrEmpty(postContent))
{
byte[] byteArray = Encoding.UTF8.GetBytes(postContent);
request.ContentType = "application/json; charset=utf-8";
request.ContentLength = byteArray.Length;
var dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
}
try
{
using (WebResponse response = request.GetResponse())
{
var responseStream = response.GetResponseStream();
if (responseStream != null)
{
var reader = new StreamReader(responseStream);
receiveContent = reader.ReadToEnd();
reader.Close();
return ((HttpWebResponse) response).StatusCode;
}
}
}
catch (Exception ex)
{
receiveContent = string.Format("{0}\n{1}\nposted content = \n{2}", ex, ex.Message, postContent);
return HttpStatusCode.BadRequest;
}
receiveContent = null;
return 0;
}
Wenn ich generieren einer Anforderung, stellt mich mit einer Fehlermeldung, die ich bekomme im die Fehlermeldung: The remote server returned an error: (400) Bad Request.
und keine InnerException, und nichts anderes kann ich profitieren von der aus die Ausnahme.
[Antwort] @Rene spitz in die richtige Richtung und die richtige Antwort Körper erworben werden können, wie diese:
var reader = new StreamReader(ex.Response.GetResponseStream());
var content = reader.ReadToEnd();
InformationsquelleAutor AlexD | 2015-08-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du bist fangen die generische Ausnahme, so gibt es nicht viel Raum für spezifische Informationen.
Sollten Sie fangen die spezielle Ausnahme die ausgelöst wird durch die einzelnen webrequest Klassen, nämlich
WebException
Ihre catch-code könnte wie folgt Aussehen:
In der WebException Instanz haben Sie auch Zugriff auf die
Antwort
senden Sie vom host, so dass Sie erreichen können, etwas, das zu Euch senden.Ich habe Hinzugefügt, wie Sie überprüfen können, die anderen Sachen. vielleicht könnten Sie teilen, was postman zeigt, so dass ich verstehe, was du bist suchen für.
Hier ist die Antwort, die ich bin immer in POSTMAN: pastebin.com/uDRDesd7 und hier ist die Header-Sammlung: pastebin.com/FVzd7kWS
Eigentlich habe ich versucht, das Lesen der ConnectStream wie diese:
new StreamReader(((((HttpWebResponse)ex.Response))).m_ConnectStream).ReadToEnd()
und es scheint den trick tun. Ich werde zu aktualisieren, in einem momentvar reader = new StreamReader(ex.Response.GetResponseStream()); var content = reader.ReadToEnd();
Gut funktioniert 🙂 vielen Dank!InformationsquelleAutor rene