加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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属性并将其全部挂起.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读