Wie poste ich eine Zeichenfolge „HttpContent“ an die ASP.net Core-Web-API?C#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Wie poste ich eine Zeichenfolge „HttpContent“ an die ASP.net Core-Web-API?

Post by Anonymous »

Auf der Clientseite poste ich eine Anfrage mit der Klasse HttpClient an eine ASP.net-Kernweb-API auf der Serverseite.
Ich möchte eine Zeichenfolge senden (

Code: Select all

"OK"
) im Hauptteil der Anfrage und ein Zeichenfolgenargument (

Code: Select all

numStr=5
) im Header, ich habe viele ähnliche Threads gelesen, bin aber immer noch fehlgeschlagen.
Hier ist die Client-Methode:

Code: Select all

public async void SendBodyAsync(Action onRespond)
{
try
{
string URL = "http://localhost:60039/api/calculator/AddMore";

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, URL);
request.Headers.Add("numStr", "5");

request.Content = new StringContent("OK", Encoding.UTF8, "text/plain");   //causes error

HttpResponseMessage response = await mHttpClient.SendAsync(request);
response.EnsureSuccessStatusCode();

string result = await response.Content.ReadAsStringAsync();
onRespond(result);
}
catch (HttpRequestException ex)
{
Debug.LogError(ex);       //Unity3D console Debug
onRespond(null);
}
}
Hier ist die Serveraktion:

Code: Select all

[Route("api/[controller]/[action]")]
[ApiController]
public class CalculatorController : ControllerBase
{
public string AddMore([FromHeader]string numStr)
{
//string bodyStr;
//get string from Request.Body and set the value to bodyStr
return (int.Parse(numStr) + 10).ToString();
}
}
Wenn ich die Zeile request.Content = new StringContent("OK", Encoding.UTF8, "text/plain"); aus der Client-Methode entferne, ist der Antwortwert 15, was korrekt ist.
Bei request.Content zeigt der Client jedoch den Fehler an:

Beim Senden der Anfrage ist ein Fehler aufgetreten --->
System.Net.WebException: Die Anforderung erfordert die Pufferung von Daten, um
erfolgreich zu sein.

Der Server-Breakpoint wurde nicht ausgelöst, daher wurde die Anforderung nicht erfolgreich gesendet.
Ich habe eine weitere sehr einfache Servermethode mit HttpListener erstellt, sie liest den request.Content als clientContext-Stream korrekt. Ich denke, dass das Problem möglicherweise darin liegt, dass request.Content nicht mit dem HTTP-Body übereinstimmt, und es ist unwahrscheinlich, dass es sich um ein Pufferproblem handelt, wie in der Fehlermeldung angegeben.
Meine Fragen sind:
  • Wie sendet man einen String im HTTP-Body richtig? Er ist kein Argument und kann lang sein (wie ein vollständiges Spielerprofil im String-Format), daher ist er nicht für Header oder Abfrage geeignet oder...
  • Wie kann ich die Zeichenfolge im Anforderungstext auf der Serverseite korrekt empfangen und analysieren?
Vielen Dank für das Lesen meines Beitrags.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post