C# 正在IActionFilter OnActionExecuting()中获取请求的大小

C# 正在IActionFilter OnActionExecuting()中获取请求的大小,c#,request,asp.net-core-2.1,C#,Request,Asp.net Core 2.1,项目设置:Asp.NETCore2.1,Docker环境下的WebAPI 我想通过API上的查询参数获取get请求的大小,以便记录日志。 我有一个在项目中实现IActionFilter的操作过滤器。OnActionExecuting()是我解释请求的方法 但是我在context.HttpContext.Request.ContentLength属性中总是得到null。另外,通过流读取器读取文本变量中的正文,该文本变量也是空的。 这是一个有效的检查位置,还是我指的是ActionExecutingC

项目设置:Asp.NETCore2.1,Docker环境下的WebAPI

我想通过API上的查询参数获取get请求的大小,以便记录日志。 我有一个在项目中实现IActionFilter的操作过滤器。OnActionExecuting()是我解释请求的方法

但是我在context.HttpContext.Request.ContentLength属性中总是得到null。另外,通过流读取器读取文本变量中的正文,该文本变量也是空的。 这是一个有效的检查位置,还是我指的是ActionExecutingContext的不同属性

public void OnActionExecuting(ActionExecutingContext context)
{

string requestSize = "";

//Try 1:
requestSize = Convert.ToString(context.HttpContext.Request.ContentLength);

//Try 2:
//Since the Try 1 is null, following doesn't really matter. But still tried.
using (var bodyReader = new StreamReader(context.HttpContext.Request.Body))
{
     var bodyAsText = bodyReader.ReadToEnd();
     if (string.IsNullOrWhiteSpace(bodyAsText) == false)
     {
     requestSize = bodyAsText.Length;
     }
}

// Console.WriteLine(requestSize );

}
请求大小需要一些字节数,但为null

这是检查这个的有效地方吗


GET请求没有正文

ContentLength
为null且正文流为空是GET请求的预期行为

如果希望访问查询字符串,则需要检查请求并提取查询字符串

context.HttpContext.Request.QueryString

GET请求没有正文。谢谢@Nkosi。这有帮助。现在,在OnActionExecuted()中,我必须获得响应的大小。在这里,我在context.HttpContext.Response.ContentLength中得到null,而响应中确实有相当数量的数据。我发现在context.Result中,我可以得到结果的字节吗?@Arjun\u TECH如果有实际返回的内容,响应应该包含数据。您是否也尝试过检查响应主体?是的,正如我所说,响应确实包含我可以在context.Result属性中看到的数据。更具体地说:((Microsoft.AspNetCore.Mvc.ObjectResult)context.Result).Value。如果您指的是context.HttpContext.Response.Body,那么Body中没有任何内容。这意味着操作结果尚未执行,因此它没有时间填充响应Body。