我有一个ASP.NET WebApi,客户端通过HMAC进行身份验证。
身份验证在AuthenticationFilter中完成
为了比较HMAC密钥和客户端提供的密钥,我需要阅读Request.Content
。一切都很好,直到这里。
在ParameterBinding中我还需要从Request.Content读取。这样可以正常工作,直到内容不是multipart/form-data
。 StringContent
和ByteArrayContent
可以通过content.ReadAsStringAsync()
/ content.ReadAsByteArrayAsync()
多次阅读,但ReadAsMultipartAsync()
只能调用一次。
因此,在身份验证后,我无法再次阅读内容(例如在ParamterBinding中),以便从请求内容中提取数据/图像等。
我在内部读到ReadAsStringAsync()
/ ReadAsByteArrayAsync()
调用LoadIntoBufferAsync()
,它将请求内容加载到内存缓冲区中。但使用我的多部分内容执行此操作并不能解决此问题。
例外是:
MIME多部分流的意外结束。 MIME多部分消息不是 完整。
答案 0 :(得分:0)
如果您有权访问HttpContext.Current
(非自托管),则可以在阅读后回滚输入流。像这样:
HttpContext.Current.Request.InputStream.Position=0;