【问题标题】:Read multipart/form-data twice读取多部分/表单数据两次
【发布时间】:2015-11-19 17:47:28
【问题描述】:

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

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

在 ParameterBinding 中,我还需要从 Request.Content 中读取。这工作正常,直到内容不是multipart/form-dataStringContentByteArrayContent可以通过content.ReadAsStringAsync()/content.ReadAsByteArrayAsync()多次读取,但ReadAsMultipartAsync()只能调用一次。

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

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

例外是:

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

【问题讨论】:

    标签: asp.net-web-api multipartform-data hmac


    【解决方案1】:

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

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

    【讨论】:

    • 我已经完成了这个和它的工作。但这不是一个小黑客吗?文档说,您只能阅读一次。 ;-)
    • 当然感觉像个黑客:/也许其他人可以提供更好的解决方案。
    猜你喜欢
    • 2019-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    • 2017-03-30
    • 2020-09-13
    • 2023-04-03
    • 2012-09-10
    相关资源
    最近更新 更多