Asp.net web api 读取多部分/表单数据两次

Asp.net web api 读取多部分/表单数据两次,asp.net-web-api,multipartform-data,hmac,Asp.net Web Api,Multipartform Data,Hmac,我有一个ASP.NET WebApi,客户端通过HMAC进行身份验证 身份验证在AuthenticationFilter中完成。 要将HMAC密钥与客户端提供的密钥进行比较,我需要阅读Request.Content。在这里之前一切都很好 在ParameterBinding中,我还需要读取Request.Content。这很好,直到内容不是多部分/表单数据StringContent和ByteArrayContent。readastringasync()/content.ReadAsByteArra

我有一个ASP.NET WebApi,客户端通过HMAC进行身份验证

身份验证在AuthenticationFilter中完成。
要将HMAC密钥与客户端提供的密钥进行比较,我需要阅读
Request.Content
。在这里之前一切都很好

在ParameterBinding中,我还需要读取Request.Content。这很好,直到内容不是
多部分/表单数据
<可以通过
内容多次读取code>StringContent
ByteArrayContent
。readastringasync()/
content.ReadAsByteArrayAsync()
,但只能调用一次
ReadAsMultipartAsync()

因此,身份验证后,我无法再次读取内容(例如,在ParamterBinding中)以从请求内容中提取数据/图像等

我读到,
ReadAsStringAsync()
/
ReadAsByteArrayAsync()
在内部调用
loadintobfferasync()
,将请求内容加载到内存缓冲区。但对我的多部分内容执行此操作并不能解决此问题

例外情况是:

MIME多部分流意外结束。MIME多部分消息不可用 完成


如果您有权访问
HttpContext.Current
(非自托管),则可以在读取输入流后倒带它。像这样:

HttpContext.Current.Request.InputStream.Position=0;

如果您有权访问
HttpContext.Current
(非自托管),则可以在读取输入流后倒带它。像这样:

HttpContext.Current.Request.InputStream.Position=0;

我已经完成了这项工作。但这不是一个小技巧吗?文档中说,您只能阅读一次。;-)当然感觉像是黑客:/也许其他人可以提供更好的解决方案。我已经做到了,而且很有效。但这不是一个小技巧吗?文档中说,您只能阅读一次。;-)确实感觉像是黑客攻击:/也许其他人可以提供更好的解决方案。