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