【问题标题】:Microsoft.AspNetCore.WebUtilities Line length limit 100 exceededMicrosoft.AspNetCore.WebUtilities 行长度限制超过 100
【发布时间】:2018-07-31 14:31:22
【问题描述】:

我一直在尝试自动化测试以将文本文件上传到使用 flowjshandler 的 web api,所有这些都在 c# .net core 和 linux docker 容器中运行。测试程序在从 Visual Studio 运行时会毫无例外地上传文件。但是,如果我在容器中运行测试程序和 web api,我会在 asp .net core web api 框架中得到这个异常:

超过行长限制 100。,Microsoft.AspNetCore.WebUtilities,
在 Microsoft.AspNetCore.WebUtilities.BufferedReadStream.d__39.MoveNext()

我查看了Microsoft.AspNetCore.WebUtilities 并找到了错误的来源,但不确定如何避免 100 个字符的限制。我试图改变上传文件。

这是一个包含内容的多部分消息

Content-Type: multipart/form-data; boundary=----WebKitFormBoundarym45GFZc25WVhjtVB
------WebKitFormBoundarym45GFZc25WVhjtVB
Content-Disposition: form-data; name="flowChunkNumber"

1
------WebKitFormBoundarym45GFZc25WVhjtVB
Content-Disposition: form-data; name="flowChunkSize"

1048576
------WebKitFormBoundarym45GFZc25WVhjtVB
Content-Disposition: form-data; name="flowCurrentChunkSize"

440
------WebKitFormBoundarym45GFZc25WVhjtVB
Content-Disposition: form-data; name="flowTotalSize"

440
------WebKitFormBoundarym45GFZc25WVhjtVB
Content-Disposition: form-data; name="flowIdentifier"

440-Boundarystxt
------WebKitFormBoundarym45GFZc25WVhjtVB
Content-Disposition: form-data; name="flowFilename"

Boundarys.txt
------WebKitFormBoundarym45GFZc25WVhjtVB
Content-Disposition: form-data; name="flowRelativePath"

Boundarys.txt
------WebKitFormBoundarym45GFZc25WVhjtVB
Content-Disposition: form-data; name="flowTotalChunks"

1
------WebKitFormBoundarym45GFZc25WVhjtVB
Content-Disposition: form-data; name="file"; filename="Boundarys.txt"

【问题讨论】:

    标签: c# asp.net asp.net-core-1.0


    【解决方案1】:

    我在 linux 容器上运行时使用 Environment.Newline 无法识别行尾。在 Content-Disposition: form-data 中将换行符更改为 \r\n

    var nl = "\r\n";
    sb.AppendFormat($"{nl}{BOUNDARY}{nl}Content-Disposition: form-data; name=\"flowChunkNumber\"{nl}{nl}{flowFileUpload.flowChunkNumber}{nl}{BOUNDARY}{nl}Content-Disposition: form-data; 
    

    【讨论】:

      【解决方案2】:

      重要的是要知道为什么没有“\r\n”会失败。查看以下规范:https://www.rfc-editor.org/rfc/rfc2046#section-4.1.1

      The canonical form of any MIME "text" subtype MUST always represent a
      line break as a CRLF sequence.  Similarly, any occurrence of CRLF in
      MIME "text" MUST represent a line break.  Use of CR and LF outside of
      line break sequences is also forbidden.
      

      所以这取决于你如何构建这个字符串。如果您使用 StringBuilder 并使用 AppendLine() 逐行构建您的请求,那将适用于 Windows,但不适用于 Linux。 AppendLine 使用 Environment.NewLine,它是 Windows 的 CRLF 和 Linux 的 LF。在幕后,BufferedReadStream 坚持使用 CRLF 根据规范描绘新行。所以在这种情况下,你需要明确并使用\r\n。

      【讨论】:

        猜你喜欢
        • 2016-01-18
        • 2013-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-17
        • 2013-02-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多