gpt4 book ai didi

c# - 为什么这个异常声称代码不写数据?

转载 作者:行者123 更新时间:2023-11-30 14:16:58 26 4
gpt4 key购买 nike

如果您运行此代码,它将抛出 WebException。内部异常是“无法为不写入数据的操作设置 Content-Length 或 Chunked Encoding”。我不明白问题的本质。谁能给这个黑暗的角落投光?

using System.Diagnostics;
using System.Net;
using System.Text;

namespace sandpit
{
static class Program
{
static void Main()
{
string INITIAL_URI = "http://docs.live.net/SkyDocsService.svc";
string SOAP = "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\"><s:Body><GetWebAccountInfoRequest xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns=\"http://schemas.microsoft.com/clouddocuments\"><BaseRequest><ClientAppId>SkyDrive Service Client</ClientAppId><Market>en-US</Market><SkyDocsServiceVersion>v1.0</SkyDocsServiceVersion></BaseRequest><GetReadWriteLibrariesOnly>false</GetReadWriteLibrariesOnly></GetWebAccountInfoRequest></s:Body></s:Envelope>";
using (WebClient wc = new WebClient())
{
wc.Encoding = Encoding.UTF8;
wc.Headers["SOAPAction"] = "GetWebAccountInfo";
wc.Headers["Accept-Language"] = "en-US";
wc.Headers["Accept"] = "text/xml";
wc.Headers["Content-Type"] = "text/xml; charset=utf-8";
string response = wc.UploadString(INITIAL_URI, SOAP);
Debug.WriteLine(response);
}
}
}
}

最佳答案

问题是由网络服务器重定向造成的。

不幸的是,您必须将 WebClient 子类化才能解决此问题。这比看起来更难,因为 Silverlight(任何风格)不喜欢这样并抛出与继承相关的异常,直到您猜测需要重写构造函数并将其归因于 SecurityCritical。

public class WebClient2 : WebClient
{
[SecurityCritical]
public WebClient2() : base() { }
protected override WebRequest GetWebRequest(System.Uri address)
{
var wr = base.GetWebRequest(address);
if (wr is HttpWebRequest)
(wr as HttpWebRequest).AllowAutoRedirect = false;
return wr;
}
}

如果您想更进一步,您可以在 WebClient2 上显示一个 AllowAutoRedirect 属性并将其全部连接起来。

关于c# - 为什么这个异常声称代码不写数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6636009/

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