c# – 为什么这个异常声称代码不写数据?
发布时间:2020-12-16 01:45:24 所属栏目:百科 来源:网络整理
导读:如果您运行此代码,它将抛出WebException.内部异常是“无法为不写入数据的操作设置Content-Length或Chunked Encoding”.我不明白问题的本质.任何人都可以将光投射到这个黑暗角落吗 using System.Diagnostics;using System.Net;using System.Text;namespace sa
如果您运行此代码,它将抛出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(任何风味)都不喜欢这样,并抛出一个继承相关的异常,直到你猜你需要覆盖ctor并将其归为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属性并将其全部挂起. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |