我需要使用WCF REST上传两个文件。上传单个文件时,WCF Restful service file upload with multi-platform support适用于我,但是当我尝试使用
时[WebInvoke(Method = "POST", UriTemplate = "FileUpload/{file1Name};{file2Name}")]
失败了。所以问题是:如何将两个参数放入Uri?
提前致谢,JP
答案 0 :(得分:0)
linked question的答案涉及上传单个文件 - 而且相当简单,因为该服务将读取整个HTTP请求主体,并且将绑定到stream参数。当您处理两个(或更多文件)时,这不起作用 - 您需要一些分隔符才能知道一个文件何时结束而另一个文件何时开始。有一些媒体类型可以解决这个问题(multipart / *是最常见的),但它们在WCF中本身不受支持(你需要创建一个自定义格式化程序来处理它,或者整个body作为流并在FileUpload操作中拆分文件。)
现在假设您有办法在请求正文中接收两个文件,我们可以转到您的具体问题。 URI模板功能允许您传递多个参数,但它们不能位于URI路径的“部分”中。一种选择是将它们分成多个部分:
[WebInvoke(UriTemplate = "FileUpload/{file1Name}/{file2Name}")]
或者使用查询参数:
[WebInvoke(UriTemplate = "FileUpload?file1={file1Name}&file2={file2Name}")]
那应该做的工作。另一种选择,因为你必须在输入流上拆分文件,就是使用一种格式,它允许你在流本身中指定名称。例如,这将是一个替代方案:
<length of first file name, in bytes>
<first fileName>
<length of the first file, in bytes>
<bytes corresponding to the first file>
<length of second file name, in bytes>
<second fileName>
<length of the second file, in bytes>
<bytes corresponding to the second file>
00 (or any other value indicating the end of the files)
还有很多其他的(包括multipart / *),并且在所有这些中你需要以某种方式解析输入以分开多个文件。