这是获取HttpContext请求主体的安全方法吗?

tom*_*tom 10 c# asp.net-mvc httpcontext http-headers asp.net-web-api

public static class HttpRequestHelper
{
    public static string RequestBody()
    {
        var bodyStream = new StreamReader(HttpContext.Current.Request.InputStream);
        bodyStream.BaseStream.Seek(0, SeekOrigin.Begin);
        var bodyText = bodyStream.ReadToEnd();
        return bodyText;
    }
}
Run Code Online (Sandbox Code Playgroud)

我打算从ActionFilters中调用它来记录传入的请求.当然可能有多个同时发出的请求.

这种方法可以吗?

Bad*_*dri 6

从一般的并发性或ASP.NET Web API的角度来看你的问题是什么?每个请求都有自己的上下文,您可以并行处理多个请求.但是这里有两件事你可以看一下.

(1)由于您正在使用HttpContext,您将自己锁定到Web托管(IIS),在许多情况下应该没问题.但我希望你能意识到这一点.

(2)HttpRequestHelper.RequestBody()正如您所提到的,当您从动作过滤器调用时,您的代码将起作用.但是,如果你试图从其他地方调用它,比如说一个消息处理程序,这将不起作用.当我说这不起作用时,将请求体绑定到操作方法参数的参数绑定将不起作用.一旦完成,你将需要寻求开始.它从动作过滤器起作用的原因是动作过滤器在管道中运行时已经发生了绑定.这是您可能需要注意的另一件事.