C#学习教程:C#中的HttpWebRequest不适用于.net4.5.NetFramework4.0已安装并且工作正常。安装.NetFramework4.5后会抛出此异常:System.NullReferenceException:DerObjektverweiswurdenichtaufeineObjektinstanzfestgelegt。beiSystem.DomainNameHelper.IdnEquivalent(Stringhostname)beiSystem.Uri.get_IdnHost()beiSystem.Net.HttpWebRequest。GetSafeHostAndPort(UrisourceUri,BooleanaddDefaultPort,BooleanforcePunycode)beiSystem.Net.HttpWebRequest.GenerateProxyRequestLine(Int32headersSize)beiSystem.Net.HttpWebRequest.SerializeHeaders()beiSystem.Net.HttpWebRequest.EndqueSubmitRequest()betSystem.NetpCheckDeferredCallDone(ConnectingStream)stream)beiSystem.Net.HttpWebRequest.BeginGetResponse(AsyncCallbackcallback,Objectstate)beiFahrzeugverwaltungsserver.OutsideWorld.MAN_Integrationsserver.RawCommunication.ISServer.doPostAndGet()`我使用BeginGetResponse方法,所有参数都不为空。有谁知道出了什么问题?为什么它适用于4.0而不是4.5?我忘记设置什么了吗?编辑1privatevoiddoPostAndGet(){try{//缓存通知(SystemIcons.Information,Translations.ISServer_postAndGet_0);Trace.TraceInformation("OUT:n"+Beautify(InputXML));字符串c=cache.Get(InputXML.OuterXml);if(c!=null){XmlDocumentdocl=newXmlDocument();文档.LoadXml(c);通知(SystemIcons.Information,Translations.ISServer_postAndGet_1);printInDocument(docl,"AusCache.");=文档;}//读取访问信息:UriBuilderurib=newUriBuilder("http",MANHaendlerdaten.IS_host,9005,MANHaendlerdaten.IS_path);urib.UserName=MANHaendlerdaten.IS_user;urib.Password=MANHaendlerdaten.IS_password;StringproxyUser=MANHaendlerdaten.IS_proxy_user;StringproxyPassword=MANHaendlerdaten.IS_proxy_password;//为请求的标头创建凭据:varproxy=Convert.ToBase64String(Encoding.UTF8.GetBytes(proxyUser+":"+proxyPassword));varuser=Convert.ToBase64String(Encoding.UTF8.GetBytes(urib.UserName+":"+urib.Password));//在需要时设置代理:try{WebRequest.DefaultWebProxy=newWebProxy(MANHaendlerdaten.IS_proxy_ip,MANHaendlerdaten.IS_proxy_port);if(WebRequest.DefaultWebProxy==null)Trace.WriteLine(String.Format("WebRequest.DefaultWebProxyistnull.{0},{1}",MANHaendlerdaten.IS_proxy_ip,MANHaendlerdaten.IS_proxy_port));}catch(Exceptione){Trace.TraceError("1n"+e.ToString());Debug.WriteLine(Translations.ISServer_postAndGet_3);WebRequest.DefaultWebProxy=null;//通过避免代理自动检测来加速进一步的请求//当没有指定代理时通过}//System.Net.ServicePointManager.Expect100Continue=false//如果没有设置为false,这是一个讨厌的client=(HttpWebRequest)WebRequest.Create(urib.Uri);//编码:client.Headers.Add("Accept-Encoding","deflate");client.ContentType="text/xml;charset=UTF-8";client.Accept="text/xml;charset=UTF-8";client.Headers.Add("SOAPAction","""");//Authentication:client.Headers.Add("Proxy-Authorization","Basic"+proxy);client.Headers.Add("Authorization","Basic"+user);//连接和协议: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=newWebProxy(MANHaendlerdaten.IS_proxy_ip,MANHaendlerdaten.IS_proxy_port);if(client.Proxy==null)Trace.WriteLine(String.Format("client.Proxyistnull.{0},{1}",MANHaendlerdaten.IS_proxy_ip,MANHaendlerdaten.IS_proxy_port));client.ReadWriteTimeout=60000;//在这个ISServer实例中接受cookieif(this.cookieCont==null){this.cookieCont=newCookieContainer();}client.CookieContainer=cookieCont;inform(SystemIcons.Information,Translations.ISServer_postAndGet_7);//发布请求:使用(Streamto_request=client.GetRequestStream()){InputXML.Save(to_request);to_request.Flush();}RequestStatemyRequestState=newRequestState();myRequestState.request=客户端;webrequestresponse=false;IAsyncResultasyncResult=client.BeginGetResponse(newAsyncCallback(FinishWebRequest),myRequestState);while(webrequestresponse==false){Thread.Sleep(100);}}catch(Exceptione){Trace.TraceError(e.ToString());扔e;}}编辑2在我的配置文件中,我主要使用appsettings进行个人设置,例如:老实说,因为您现在的目标是.NET4.5,所以我会使用HttpClient而不是HttpWebRequest。关于HttpClient的奇怪之处在于没有发布任何严肃的答案......HttpWebRequest在.NET4.5及更高版本中已被弃用,因此它不会编译,这在msdn站点上有说明,这就是为什么Jammer说要使用HttpClient作为替代品,因为它似乎是微软为它制造的替代品。看起来要更改您的代码会很费力,但我想说这是最好的,我遇到了与IdnEquivalent相同的奇怪问题。当我在调试会话期间启动FiddlerWeb调试器时,问题仍然存在。关闭它后,问题消失了。如前所述,HttpWebRequest现在已过时。您尝试过HttpRequest吗?在这里找到:https://msdn.microsoft.com/en-us/library/system.web.httprequest(v=vs.110).aspx以上是C#学习教程:HttpWebRequestinc#doesnotapplyto.net4.5,如果对你有用,需要详细了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
