Stream.Length抛出NotSupportedException

时间:2010-12-03 16:07:47

标签: c# stream

我正在尝试将数据发布到Restful服务并收到此错误。非常感谢任何帮助。

Length ='dataStream.Length'引发了'System.NotSupportedException'类型的异常

Position ='dataStream.Position'引发了'System.NotSupportedException'类型的异常

这是代码

[WebMethod]
//public static void Main(string output)
public string webPost()
{
    //HttpWebResponse response = null; 
    string output = null;

    // Create a request using a URL that can receive a post. 
    WebRequest request = WebRequest.Create("https://subscribers");
    request.PreAuthenticate = true;
    // Set the Method property of the request to POST.        
    request.Credentials = new NetworkCredential("userid", "password");
    request.Method = WebRequestMethods.Http.Post;

    string EmailAddress = "test@test1.com";
    string FirstName = "first";
    string LastName = "Last";

    StringBuilder Efulfill = new StringBuilder();

    Efulfill.Append("EmailAddress" + HttpUtility.UrlEncode(EmailAddress));
    Efulfill.Append("FirstName" + HttpUtility.UrlEncode(FirstName));
    Efulfill.Append("LastName" + HttpUtility.UrlEncode(LastName));

    byte[] byteData = Encoding.UTF8.GetBytes(Efulfill.ToString());

    request.ContentType = "application/xml;charset=ISO-8859-1";

    request.ContentLength = byteData.Length;

    // Get the request stream.
    Stream dataStream = request.GetRequestStream();
    // Write the data to the request stream.
    dataStream.Write(byteData, 0, byteData.Length);
    // Close the Stream object.
    dataStream.Close();
    // Get the response.
    WebResponse response = request.GetResponse();
    // Display the status.
    Console.WriteLine(((HttpWebResponse)response).StatusDescription);
    // Get the stream containing content returned by the server.
    dataStream = response.GetResponseStream();
    // Open the stream using a StreamReader for easy access.
    StreamReader reader = new StreamReader(dataStream);
    // Read the content.
    string responseFromServer = reader.ReadToEnd();
    // Display the content.
    Console.WriteLine(responseFromServer);
    // Clean up the streams.
    reader.Close();
    dataStream.Close();
    response.Close();
    return output;
}

2 个答案:

答案 0 :(得分:5)

重复:information

Reed Copsey回答说“Stream.Length仅适用于可以获得搜索的Stream实现。您通常可以检查Stream.CanSeek是否为真。”

答案 1 :(得分:-5)

您需要将Stream转换为类似MemoryStream的内容才能使其可以搜索。在CanSeek为假的Streams上,长度和位置无效。