繁体   English   中英

返回带有批处理响应的HttpResponseMessage

[英]Returning an HttpResponseMessage with a batch response

我有一个要修复的单元测试。 我需要做的就是返回一个有效的200 HttpResponseMessage,并带有针对单个查询的批处理响应(A 404会这样做)。 我是OData的新手,通常会处理HTTPMessages。 到目前为止,这是我所做的事情,但是我不确定这是做事的正确方法。 您能帮我了解我可能会出问题的地方吗?

            string content = string.Format(
                @"--batch_{0}
Content-Type: application/http
Content-Transfer-Encoding: binary
HTTP/1.1 404 Not Found
OData-Version: 4.0
Content-Type: application/json;odata.metadata=minimal;odata.streaming=true;charset=utf-8
Content-Length: 42",
batchCode);

            content = content + Environment.NewLine + @"{ .error.:.not_found.,.reason.:.missing.}".
            content = content + Environment.NewLine + Environment.NewLine + string.Format(@"--batch_{0}--", batchCode) + Environment.NewLine;

            var response = new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new StringContent(content, System.Text.Encoding.UTF8, "multipart/mixed")
            };
  1. 由于这是响应,因此边界必须为:-- --batchresponse_{batchCode}
  2. 您无需在子响应中指定OData-Version ,仅在父级的标头中指定即可。
  3. 标头和正文之间需要有一个换行符(在您的情况下,在HTTP/1.1 404 Not Found行之前)。
  4. 标头和子响应的正文之间必须有换行符(在带有您的json的行之前)。

完整的响应正文可能如下所示:

--batchresponse_4a21740c-169a-4442-b771-8989207e80e9
Content-Type: application/http
Content-Transfer-Encoding: binary

HTTP/1.1 404 Not Found
Content-Type: application/json; charset=utf-8

{"Some":"Json"}
--batchresponse_4a21740c-169a-4442-b771-8989207e80e9--

另外,响应中的json对我来说看起来不是有效的json,不确定是否有问题。

        string batchCode = this.GetBatchCode(requestContent);
        var innerResponse = new HttpMessageContent(new HttpResponseMessage(HttpStatusCode.NotFound));

        MultipartContent batchContent = new MultipartContent("mixed", "batch_" + batchCode);

        innerResponse.Headers.Remove("Content-Type");
        innerResponse.Headers.Add("Content-Type", "application/http");
        innerResponse.Headers.Add("Content-Transfer-Encoding", "binary");

        batchContent.Add(innerResponse);

        var outerResponse = new HttpResponseMessage(HttpStatusCode.OK);
        outerResponse.Content = batchContent;

        return outerResponse;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM