Sie zum Response.Body
Stream direkt schreiben kann (wie die Body
ist ein plain old System.IO.Stream
) und manuell eingestellt Inhaltstyp:
public async Task ContentAction()
{
var jsonString = "{\"foo\":1,\"bar\":false}";
byte[] data = Encoding.UTF8.GetBytes(jsonString);
Response.ContentType = "application/json";
await Response.Body.WriteAsync(data, 0, data.Length);
}
Sie sich einige Mühe sparen könnte einige Dienstprogramme von Microsoft.AspNet.Http
mit:
- Die Erweiterungsmethode
WriteAsync
zum Schreiben der Zeichenfolge Inhalt in den Antworttextkörper.
- Die Klasse
MediaTypeHeaderValue
für die Angabe des Headers für den Inhaltstyp. (Es hat einige Validierungen und hat eine API für das Hinzufügen zusätzlicher Parameter wie die charset)
Also die gleiche Aktion würde wie folgt aussehen:
public async Task ContentAction()
{
var jsonString = "{\"foo\":1,\"bar\":false}";
Response.ContentType = new MediaTypeHeaderValue("application/json").ToString();
await Response.WriteAsync(jsonString, Encoding.UTF8);
}
Im Zweifelsfall Sie immer einen Blick auf die haben Implementierung von ContentResult
und/oder JsonResult
.
Vielen Dank für Ihre Antwort. Was ist mit JSON Formatierereinstellungen? Können wir dem gleichen Muster wie zuvor folgen, in dem wir die Formatierungseinstellungen in der Startup-Klasse angeben? –
Hängt davon ab, welchen Formatierer Sie verwenden, aber wenn Sie sich die Implementierung von JsonResult ansehen, sehen Sie, dass sie 'context.HttpContext.RequestServices.GetRequiredService>()' verwenden. Das bedeutet, dass Sie die Optionen in den integrierten DI-Container (möglicherweise in der Startup-Klasse) definieren können, und diese Optionen werden beim Formatieren verwendet. Da Sie das eingebaute 'JsonResult' nicht verwenden möchten, können Sie nach demselben Prinzip etwas eigenes implementieren. –
meinst du ich formatiere meine json, bevor ich es in writeAsync verwende? natürlich formatieren Sie es mit den Einstellungen, die ich von DI –