2017-01-25 3 views
1

Ich versuche, den Körper einer POST-Anfrage in einem ActionFilterAttribute zu erhalten. Der bodyString wird leer zurückgegeben, ohne dass Ausnahmen auftreten. Ich teste dies mit einem einfachen {"name": "Wert"} JSON.ASP.NET Core Get Request-Nachricht von ActionExecutedContext ActionFilter

public override void OnActionExecuted(ActionExecutedContext context) 
    { 
     string bodyString = string.Empty; 

      using (System.IO.MemoryStream m = new System.IO.MemoryStream()) 
      { 
       try 
       { 
        if (context.HttpContext.Request.Body.CanSeek == true) 
         context.HttpContext.Request.Body.Position = 0; 

        context.HttpContext.Request.Body.CopyTo(m); 

        bodyString = Encoding.UTF8.GetString(m.ToArray()); 
       } 
       catch (Exception ex) 
       { 
        Console.WriteLine(ex.Message); 
       } 
      } 
     } 
    } 

    base.OnActionExecuted(context); 
} 
+0

Bitte zeigen Sie Ihre POST-Anfrage – Set

Antwort

1

Der Grund, warum die Memory die Daten nicht lesen können, weil sie bereits durch gelesen wurde [FromBody] aus meiner Methode:

[HttpPost] 
[ServiceFilter(typeof(ETagFilter))] 
public IActionResult Post([FromBody]JToken body) 
{ 
    //Do something with the data 
} 

Um den Körper in der Action greift ich verwendet:

var bodyString = context.ActionArguments["body"]; 
+0

und ETagFilter? – wtf512

Verwandte Themen