【问题标题】:Why is the content-range header stripped from requests in ASP.NET Web API?为什么从 ASP.NET Web API 中的请求中剥离内容范围标头?
【发布时间】:2012-10-19 05:32:41
【问题描述】:

我正在创建一个 API,可以在其中以分块方式上传文件。

通过这个Stackoverflow question and answer,内容范围标题似乎最适合这个。

但是,在控制器操作中,标题已被剥离,因此我无法访问它。 当我使用“范围”标头时,它在请求标头集合中可用。

有人知道为什么 Content-Range 会从请求中剥离吗?

【问题讨论】:

    标签: asp.net .net asp.net-mvc-4 asp.net-web-api


    【解决方案1】:

    它没有被剥离。在 Request.Content.Headers 中查找它。看起来他们将标头与 HTTP/1.1 规范对齐——将实体标头移动到 Request.Content.Headers。
    我在一个示例请求中进行了尝试,并在那里找到了它。

    我在阅读RFC 2616的相关部分后发现了这个变化。我最近一直在研究它,因为主要作者 Fielding 也是 REST 架构风格的发明者,我正在尝试使用 ASP.NET Web API 来遵循这种风格。

    我意识到“请求”、“响应”、“一般”(用于请求和响应但与实体无关)和“实体”标头之间存在区别。

    看起来 ASP.NET 团队修改了类模型以更好地反映 RFC,创建了 HttpHeaders 的三个子类:

    • “5.3 请求标头字段”和“4.5 常规”的 HttpRequestHeaders 标题字段”
    • “6.2 响应头字段”和“4.5 常规”的 HttpResponsHeaders 标题字段”
    • “7.1 实体标头字段”的 HttpContentHeaders

    这些是MSDN中三个类的逐字描述(链接是我的):

    请注意,虽然 MSDN 类描述有点错误 - RFC 中没有 Content Headers 定义,但很明显它们的意思是 Entity Headers。

    【讨论】:

    • 很棒的发现。它确实被巧妙地隐藏了。
    • 您是否同意 content-range 是在上传期间发送文件块的适当标头?我在这个标题和范围标题之间怀疑。
    • 我没有这方面的经验,但是通过阅读规范——是的。 Range 是一个请求标头——似乎是为了请求一个范围。 Content-Range 是一个实体头,在 PUT 请求(客户端向服务器识别正在发送的块以替换现有资源的一部分)和 GET 响应(服务器向服务器识别客户端正在返回哪个块)。
    猜你喜欢
    • 2020-03-11
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 2017-02-01
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多