Daten aus einem ActionResult auswerten
Wie werte ich Nachrichten aus einem Api-Zugriff aus?
httpPost-Antwort
So kann man ActionResult Text-Meldungen aus einer Asp.Net Core Api Anwort auswerten.
Situation: der Client sendet mit httpPost eine Client-Anfrage an den Web-Server. Der Webserver antwortet in de Api-Methode mit einer ActionResult-Response.
Im Server
Asp.Net Core Web-API
ActionResult response= Json(new { status = "OK", message = 415 }); return response; |
Im Client
Hochladen von Daten zu Web-Api
HttpResponseMessage httpResponseMessage = await client.PostAsync(sUrl_Api_Create, string_to_Upload_Content ); |
Und Auswerten der Antwort vom Server
string sResult = await httpResponseMessage.Content.ReadAsStringAsync() ; |
Ergebnis:
Im Client
Dabei ergibt sich folgendes Ergebnis
Result = {"status":"OK","message":415} |
Jetzt muss man natürlich diese Information auswerten.
Denn es handelt sich offensichtlich um eine Json-Antwort.
//< result > string sResult = await httpResponseMessage.Content.ReadAsStringAsync() ; //</ result >
//*like: {"status":"OK","message":415} JsonObject jsonResult = JsonObject.Parse(sResult); string sMessage = jsonResult.GetNamedValue("message").ToString();
|
Code-Beispiel im UWP Client:
//< read webApi > //*httpPut /api/projects string sUrl_Api_Create = app_settings._Api_Server + "/api/projects"; HttpResponseMessage httpResponseMessage = null; try { //< create Upload_Content > JsonObject jsonObject = new JsonObject(); jsonObject["title"] = JsonValue.CreateStringValue(sTitle); jsonObject["html"] = JsonValue.CreateStringValue(sHTML); jsonObject["url"] = JsonValue.CreateStringValue(sURL); jsonObject["ort"] = JsonValue.CreateStringValue(sOrt); jsonObject["bereiche"] = JsonValue.CreateStringValue(sBereiche); jsonObject["gehalt"] = JsonValue.CreateStringValue(sGehalt); jsonObject["art"] = JsonValue.CreateStringValue(sArt);
StringContent string_to_Upload_Content = new StringContent(jsonObject.Stringify()); //</ create Upload_Content >
//< upload > //httpPost=Create httpResponseMessage = await client.PostAsync(sUrl_Api_Create, string_to_Upload_Content ); //</ upload >
if (httpResponseMessage.StatusCode==System.Net.HttpStatusCode.OK) {
} else { fx_Log("Upload Error=" + httpResponseMessage.ReasonPhrase); } //< result > string sResult = await httpResponseMessage.Content.ReadAsStringAsync() ; //</ result >
//*like: {"status":"OK","message":415} JsonObject jsonResult = JsonObject.Parse(sResult); string sMessage = jsonResult.GetNamedValue("message").ToString();
|
Zu Beachten ist dabei, dass der StatusCode der httpResponseMessage immer noch mit 200 ausgegeben wird.
Man kann deshalb jeder ActionResult Anwort auch einen Text als Content mitgeben.
Debugger Werte im Breakpoint des HttpResults
Name |
Value |
Type |
|
◢ |
httpResponseMessage |
{StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: { Server: Kestrel Transfer-Encoding: chunked Date: Tue, 03 Jul 2018 11:56:44 GMT X-Powered-By: ASP.NET X-SourceFiles: =?UTF-8?B?xxxxx==?= Content-Type: application/json; charset=utf-8 }} |
System.Net.Http.HttpResponseMessage |
▶ Content |
{System.Net.Http.StreamContent} |
System.Net.Http.HttpContent {System.Net.Http.StreamContent} |
|
▶ Headers |
{Server: Kestrel Transfer-Encoding: chunked Date: Tue, 03 Jul 2018 11:56:44 GMT X-Powered-By: ASP.NET X-SourceFiles: =?UTF-8?B?xxxxx==?= } |
System.Net.Http.Headers.HttpResponseHeaders |
|
IsSuccessStatusCode |
true |
bool |
|
ReasonPhrase |
"OK" |
string |
|
▶ RequestMessage |
{Method: POST, RequestUri: 'http://localhost:51198/api/projects', Version: 2.0, Content: System.Net.Http.StringContent, Headers: { Authorization: Bearer xxx.xxx Content-Type: text/plain; charset=utf-8 Content-Length: 1020 }} |
System.Net.Http.HttpRequestMessage |
|
StatusCode |
OK |
System.Net.HttpStatusCode |
|
▶ Version |
{1.1} |
System.Version |
|
▶ Static members |
|||
▶ Non-Public members |
|||
sResult |
"{\"status\":\"OK\",\"message\":415}" |
string |