项目设置: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 );
}
期望一些字节数用于请求大小,但会为空。
答案 0 :(得分:1)
这是检查此的有效地点
否
GET请求没有身体。
ContentLength
为null且主体流为空是GET请求的预期行为。
如果要访问查询字符串,则需要检查请求并提取查询字符串
context.HttpContext.Request.QueryString