将流用作wcf rest service C#中的输入时,缺少第一个元素

问题描述 投票:0回答:1

我有一个wcf rest服务,其中Stream作为输入参数:

    [OperationContract]
    [WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
    void ImportStream(Stream data);

我的代码:

 public void ImportStream(Stream data)
    {
        if (data.ReadByte() != -1)
        {                
            using (var reader = new StreamReader(data))
            {                               
                string textRead = reader.ReadToEnd();
            }
        }
}

这是我在POSTMAN中输入的文字:

D_CA,P_AMOUNT,D_AN,D_PE,D_RU,D_ORU,D_AC,,D_GO,D_LE,D_NU,D_CO,D_MU,D_PMU,D_DP,P_COMMENT                              
A,100,,2019.12,S000,S000,XA1810,F00,PACK01,,S002,EUR,ORIG07-01,0000.PACKAGE,,,,,,2019.12,           
A,100,,2019.12,S000,S000,XA1810,F00,PACK01,,S004,EUR,ORIG07-01,0000.PACKAGE,,,,,,2019.12, 

因此,我有textRead:

"_CA,P_AMOUNT,D_AN,D_PE,D_RU,D_ORU,D_AC,,D_GO,D_LE,D_NU,D_CO,D_MU,D_PMU,D_DP,P_COMMENT     ....... "

如您所见,第一个字符'D'不见了!?

我该如何解决?谢谢

c# rest wcf stream streamreader
1个回答
0
投票

ReadBytes的问题,请参阅文档

FileStream.ReadByte方法

从文件中读取一个字节并将读取位置前进一个字节。

将流位置设置为文件的开头。

 public void ImportStream(Stream data)
    {
        if (data.ReadByte() != -1)
        {    
            data.Seek(0, SeekOrigin.Begin);            
            using (var reader = new StreamReader(data))
            {                               
                string textRead = reader.ReadToEnd();
            }
        }
}
© www.soinside.com 2019 - 2024. All rights reserved.