c#中的HttpWebRequest不适用于.net 4.5

我正在开发一个c#项目,它将xml发送到服务器并接收xml作为响应。
安装了.Net Framework 4.0,工作正常。
安装.Net Framework 4.5后会抛出此exception:

System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt. bei System.DomainNameHelper.IdnEquivalent(String hostname) bei System.Uri.get_IdnHost() bei System.Net.HttpWebRequest.GetSafeHostAndPort(Uri sourceUri, Boolean addDefaultPort, Boolean forcePunycode) bei System.Net.HttpWebRequest.GenerateProxyRequestLine(Int32 headersSize) bei System.Net.HttpWebRequest.SerializeHeaders() bei System.Net.HttpWebRequest.EndSubmitRequest() bei System.Net.HttpWebRequest.CheckDeferredCallDone(ConnectStream stream) bei System.Net.HttpWebRequest.BeginGetResponse(AsyncCallback callback, Object state) bei Fahrzeugverwaltungsserver.OutsideWorld.MAN_Integrationsserver.RawCommunication.ISServer.doPostAndGet()` 

我使用BeginGetResponse方法,所有参数都不为null。
有人知道什么是错的吗?
为什么它适用于4.0但不适用于4.5?
我忘记了要设置的东西吗?

编辑1

 private void doPostAndGet() { try { //caching inform(SystemIcons.Information, Translations.ISServer_postAndGet_0); Trace.TraceInformation("OUT:\n" + Beautify(InputXML)); string c = cache.Get(InputXML.OuterXml); if (c != null) { XmlDocument docl = new XmlDocument(); docl.LoadXml(c); inform(SystemIcons.Information, Translations.ISServer_postAndGet_1); printInDocument(docl, "Aus Cache."); this.doc = docl; } //Read access information: UriBuilder urib = new UriBuilder("http", MANHaendlerdaten.IS_host, 9005, MANHaendlerdaten.IS_path); urib.UserName = MANHaendlerdaten.IS_user; urib.Password = MANHaendlerdaten.IS_password; String proxyUser = MANHaendlerdaten.IS_proxy_user; String proxyPassword = MANHaendlerdaten.IS_proxy_password; // create credentials for request's header: var proxy = Convert.ToBase64String( Encoding.UTF8.GetBytes(proxyUser + ":" + proxyPassword)); var user = Convert.ToBase64String( Encoding.UTF8.GetBytes(urib.UserName + ":" + urib.Password)); //set proxy when needed: try { WebRequest.DefaultWebProxy = new WebProxy(MANHaendlerdaten.IS_proxy_ip, MANHaendlerdaten.IS_proxy_port); if (WebRequest.DefaultWebProxy == null) Trace.WriteLine(String.Format("WebRequest.DefaultWebProxy ist null. {0}, {1}", MANHaendlerdaten.IS_proxy_ip, MANHaendlerdaten.IS_proxy_port)); } catch (Exception e) { Trace.TraceError("1\n" + e.ToString()); Debug.WriteLine(Translations.ISServer_postAndGet_3); WebRequest.DefaultWebProxy = null; //speed up further request by avoiding proxy-auto-detect //pass when no proxy specified } // System.Net.ServicePointManager.Expect100Continue = false //this is a nasty one if not set to false client = (HttpWebRequest)WebRequest.Create(urib.Uri); //Encodings: client.Headers.Add("Accept-Encoding", "deflate"); client.ContentType = "text/xml; charset=UTF-8"; client.Accept = "text/xml; charset=UTF-8"; client.Headers.Add("SOAPAction", "\"\""); //Authentification: client.Headers.Add("Proxy-Authorization", "Basic " + proxy); client.Headers.Add("Authorization", "Basic " + user); //Connection and Protocol: client.Host = urib.Host; client.UserAgent = Translations.FullServiceName; client.ProtocolVersion = HttpVersion.Version10; client.KeepAlive = true; client.Method = WebRequestMethods.Http.Post; client.Timeout = 60000; client.Proxy = new WebProxy(MANHaendlerdaten.IS_proxy_ip, MANHaendlerdaten.IS_proxy_port); if (client.Proxy == null) Trace.WriteLine(String.Format("client.Proxy ist null. {0}, {1}", MANHaendlerdaten.IS_proxy_ip, MANHaendlerdaten.IS_proxy_port)); client.ReadWriteTimeout = 60000; //accept cookies within this ISServer-instance if (this.cookieCont == null) { this.cookieCont = new CookieContainer(); } client.CookieContainer = cookieCont; inform(SystemIcons.Information, Translations.ISServer_postAndGet_7); //Post request: using (Stream to_request = client.GetRequestStream()) { InputXML.Save(to_request); to_request.Flush(); } RequestState myRequestState = new RequestState(); myRequestState.request = client; webrequestresponse = false; IAsyncResult asyncResult = client.BeginGetResponse(new AsyncCallback(FinishWebRequest), myRequestState); while (webrequestresponse == false) { Thread.Sleep(100); } } catch (Exception e) { Trace.TraceError(e.ToString()); throw e; } } 

编辑2
在我的配置文件中,我主要使用appsettings进行个别设置。 喜欢:

说实话,因为您现在的目标是.NET 4.5,我将使用HttpClient而不是HttpWebRequest。

HttpClient的

奇怪的是,已经没有发布严肃的答案……

HttpWebRequest在.NET 4.5及更高版本中已经过时,所以它不会编译,这在msdn网站上有说明

这就是为什么Jammer说使用HttpClient作为替代品,因为它似乎是微软为它做出的替代品。

看起来这将是一个改变你的代码的努力,但我会说它是最好的

我在IdnEquivalent中遇到了同样奇怪的问题。 当我在调试会话期间启动Fiddler Web调试器时问题仍然存在。 关闭后,问题消失了。

如前所述,HttpWebRequest现在已经过时了。 你试过HttpRequest吗? 在此处找到: https : //msdn.microsoft.com/en-us/library/system.web.httprequest(v = vs.110).aspx