gpt4 book ai didi

c# - WCF Restful 服务 - 在一个请求中发送包含多个字段的文件

转载 作者:太空宇宙 更新时间:2023-11-03 11:34:07 24 4
gpt4 key购买 nike

我正在开发 WCF Restful 服务。 WCF 的要求之一是允许客户端上传一个图像文件和几个可能包含多个值的输入参数。

我想到了几种在一个请求中发送带有输入参数的文件的方法。我不确定最好的方法是什么。

1) 接受包含多部分表单数据流的流。这种方法的一个巨大缺点是我必须编写一个多部分解析器。 (aspNetCompatibilityEnabled="false")

[WebInvoke (UriTemplate = "Account",Method = "POST")]
public String Account(System.IO.Stream stream) {
MultiPartParser(stream);
}

2) 将文件作为流发送,并在QueryString 中发送其他数据。这种方法的唯一问题是值可能是多行文本数据。

[WebInvoke (UriTemplate = "Account?input1={val1}&input2={val2}",Method = "POST")]
public String Account(System.IO.Stream stream) {

}

3) 将文件转换为 Base64 字符串并将其封装在 JSON 或 XML 中,并与其他输入参数一起发送。这种方法有什么局限性吗?

[WebInvoke (UriTemplate = "Account",Method = "POST")]
public String Account(String ImageFile, String input1, String input2) {

}

什么是最好的方法?感谢您的宝贵时间。

最佳答案

一如既往,答案是“视情况而定”。您提到了每种方法的优缺点,因此这实际上取决于您的情况。

  1. 优点:文件内容未编码(即没有大小膨胀)。缺点:您需要在服务器上编写多部分解析器(并在客户端打包请求),多部分 header 会给请求增加一些(通常不重要的)开销

  2. 优点:简单,操作容易写。缺点:可能需要对换行符等字符进行 URL 编码;如果附加数据很大,URI 的大小限制可能是个问题

  3. 优点:无需编码,操作简单易写。缺点:由于 base64 编码(您可以将参数声明为 byte[],以便自动为您完成解码),大小膨胀,客户端需要对文件内容进行编码,并包装请求中的所有参数。

还有第四种选择,就是将附加参数作为 HTTP header 传递。

  1. 优点:没有 URI 中的大小限制。缺点:参数未明确声明,需要使用 WebOperationContext 从 header 中获取它们,并且仍然需要对 0x20-0x7E 范围之外的字符进行 URI 编码

关于c# - WCF Restful 服务 - 在一个请求中发送包含多个字段的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6825992/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com