How to read request body in a asp.net core webapi controller?
A clearer solution, works in ASP.Net Core 2.1 / 3.1
Filter class
using Microsoft.AspNetCore.Authorization; // For ASP.NET 2.1 using Microsoft.AspNetCore.Http.Internal; // For ASP.NET 3.1 using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.Filters; public class ReadableBodyStreamAttribute : AuthorizeAttribute, IAuthorizationFilter { public void OnAuthorization(AuthorizationFilterContext context) { // For ASP.NET 2.1 // context.HttpContext.Request.EnableRewind(); // For ASP.NET 3.1 // context.HttpContext.Request.EnableBuffering(); } }
In an Controller
[HttpPost] [ReadableBodyStream] public string SomePostMethod() { //Note: if you're late and body has already been read, you may need this next line //Note2: if "Note" is true and Body was read using StreamReader too, then it may be necessary to set "leaveOpen: true" for that stream. HttpContext.Request.Body.Seek(0, SeekOrigin.Begin); using (StreamReader stream = new StreamReader(HttpContext.Request.Body)) { string body = stream.ReadToEnd(); // body = "param=somevalue¶m2=someothervalue" } }
Source: c# – How to read request body in a asp.net core webapi controller? – Stack Overflow