0

다음은 WebApi 닷넷 코어 2 프로젝트 내 ActionFilter입니다 :WebApi Core ActionFilter에서 Body를 String으로 요청 하시겠습니까?

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] 
public class RequestLoggingAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext actionContext) 
    { 
     var request = actionContext.HttpContext.Request; 
     var route = request.Path.HasValue ? request.Path.Value : ""; 
     var requestHeader = request.Headers.Aggregate("", (current, header) => current + $"{header.Key}: {header.Value}{Environment.NewLine}"); 
     request.EnableRewind(); 
     var requestBody = new StreamReader(request.Body).ReadToEnd(); 
    } 
} 

requestHeader가 올바른 값을 가지고 있으며, 그것은 OK,하지만 requestBody는 항상 비어 있습니다.
다음 본문과 함께 요청을 작업에 보내어 테스트합니다.

[ 
{ 
    "TrackingCode": "96003445", 
    "Description": "", 
    "InnerMessage": "", 
    "Status": 11 
}, 
{ 
    "TrackingCode": "96003840", 
    "Description": "", 
    "InnerMessage": "Inner message", 
    "Status": 11 
} 
] 

WebApi Core 2 ActionFilter에서 요청 본문은 어떻게 얻을 수 있습니까?

@Nkosi와
+0

확인 위치를 작동하고 0 – Nkosi

+0

HTTPS를 재설정 할 필요가있는 경우 참조 : // 유래 .com/questions/32339283/webapi-get-the-post-raw-body-inside-a-filter –

답변

0

것은 나는 다음과 같은 해결책을 찾을 수있는 안내 :

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] 
public class RequestLoggingAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext actionContext) 
    { 
     var request = actionContext.HttpContext.Request; 
     var route = request.Path.HasValue ? request.Path.Value : ""; 
     var requestHeader = request.Headers.Aggregate("", (current, header) => current + $"{header.Key}: {header.Value}{Environment.NewLine}"); 
     var requestBody = ""; 
     request.EnableRewind(); 
     using (var stream = new StreamReader(request.Body)) 
     { 
      stream.BaseStream.Position = 0; 
      requestBody = stream.ReadToEnd(); 
     } 
    } 
} 

그것은 스트림에서 잘