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

时间:2019-09-27 12:24:59

标签: c# request asp.net-core-2.1

项目设置:Asp .NET core 2.1,Docker环境下的Web Api。

我想在我们的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 );

}

期望一些字节数用于请求大小,但会为空。

1 个答案:

答案 0 :(得分:1)

  

这是检查此的有效地点

GET请求没有身体。

ContentLength为null且主体流为空是GET请求的预期行为。

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

context.HttpContext.Request.QueryString