gpt4 book ai didi

c# - dataStream.Length 和 .Position 引发了类型为 'System.NotSupportedException' 的异常

转载 作者:太空狗 更新时间:2023-10-29 23:01:26 24 4
gpt4 key购买 nike

我正在尝试使用 http post 将一些数据从 asp.net 发布到 webservice。

在执行此操作时,我收到了随附的错误。我检查了很多帖子,但没有什么能真正帮助我。对此的任何帮助将不胜感激。

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

Position = 'dataStream.Position' 抛出类型为 'System.NotSupportedException' 的异常

请附上我的代码:

public XmlDocument SendRequest(string command, string request)
{
XmlDocument result = null;

if (IsInitialized())
{
result = new XmlDocument();

HttpWebRequest webRequest = null;
HttpWebResponse webResponse = null;

try
{
string prefix = (m_SecureMode) ? "https://" : "http://";
string url = string.Concat(prefix, m_Url, command);

webRequest = (HttpWebRequest)WebRequest.Create(url);
webRequest.Method = "POST";
webRequest.ContentType = "text/xml";
webRequest.ServicePoint.Expect100Continue = false;

string UsernameAndPassword = string.Concat(m_Username, ":", m_Password);
string EncryptedDetails = Convert.ToBase64String(Encoding.ASCII.GetBytes(UsernameAndPassword));

webRequest.Headers.Add("Authorization", "Basic " + EncryptedDetails);

using (StreamWriter sw = new StreamWriter(webRequest.GetRequestStream()))
{
sw.WriteLine(request);
}

// Assign the response object of 'WebRequest' to a 'WebResponse' variable.
webResponse = (HttpWebResponse)webRequest.GetResponse();

using (StreamReader sr = new StreamReader(webResponse.GetResponseStream()))
{
result.Load(sr.BaseStream);
sr.Close();
}
}

catch (Exception ex)
{
string ErrorXml = string.Format("<error>{0}</error>", ex.ToString());
result.LoadXml(ErrorXml);
}
finally
{
if (webRequest != null)
webRequest.GetRequestStream().Close();

if (webResponse != null)
webResponse.GetResponseStream().Close();
}
}

return result;
}

提前致谢!!

拉提卡

最佳答案

当您调用 HttpWebResponse.GetResponseStream 时, 它返回一个 Stream implementation那没有任何召回能力;换句话说,从 HTTP 服务器发送的字节直接发送到该流以供使用。

这不同于说 FileStream instance因为如果你想读取你已经通过流消费的文件的一部分,磁盘头总是可以移回读取文件的位置(很可能,它在内存中缓冲,但你明白了)。

对于 HTTP 响应,您实际上必须重新发出到服务器的请求才能再次获得响应。因为不能保证该响应是相同的,所以 Stream 实现中的大部分位置相关方法和属性(例如 LengthPositionSeek )传回给您NotSupportedException .

如果您需要在Stream 中向后移动,那么您应该创建一个MemoryStream instance。并通过 CopyTo method 将响应 Stream 复制到 MemoryStream ,像这样:

using (var ms = new MemoryStream())
{
// Copy the response stream to the memory stream.
webRequest.GetRequestStream().CopyTo(ms);

// Use the memory stream.
}

请注意,如果您不使用 .NET 4.0 或更高版本(在 Stream 类上引入了 CopyTo),那么您可以 copy the stream manually .

关于c# - dataStream.Length 和 .Position 引发了类型为 'System.NotSupportedException' 的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10604774/

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