C# POST提交数据302错误求解【NET正常CORE302错误】测试环境NET 5.0

อาเหว่ย 2020-11-14 11:40:47
我用NET 4.8正常的代码但换成NET CORE就302错误了。
测试了两个组件 都是一样的错误【HttpClient和HttpWebRequest】
原来NET正常的
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(strPostUrl);
req.ServicePoint.Expect100Continue = false;
req.Host = PostHost;
req.KeepAlive = true;
req.Proxy = null;//
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded;charset=" + charset;
Stream streamReq = req.GetRequestStream();
streamReq.Write(bytPost, 0, bytPost.Length);
streamReq.Flush();
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
换HttpClient测试代码
HttpContent content = new StringContent(strPostData, Encoding.UTF8);
content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/x-www-form-urlencoded" );
HttpResponseMessage hrm = hc.PostAsync(strPostUrl, content).Result;
hrm.EnsureSuccessStatusCode();
ResponseText = hrm.Content.ReadAsStringAsync().Result;
ResponseAbsoluteUri = hrm.RequestMessage.RequestUri.AbsoluteUri;

发现CORE的测试结果一样的错误。NET FRAMEWORK是正常运行的。
求解。感谢
...全文
9887 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 7 楼 wanghui0380 的回复:
这就是说,微软完全按照了http的标准做了 302在w3c的标准里约定,由client端在收到302后,自己根据头部location的url重新发起提交 建议去github的netcore项目里发一个issue提交,看看项目组怎么回复。
大哥你讲到重点了。一句话302要自己手动处理。NET原来不用。分给你了。感谢大家
wanghui0380 2020-11-17
  • 打赏
  • 举报
回复
net的人还是不要总跟着博客园后面吃灰,适当的时候还是应该直接参与官方项目,目前runtime的issues都有5k+,那才是第一手资料。
wanghui0380 2020-11-17
  • 打赏
  • 举报
回复
这就是说,微软完全按照了http的标准做了 302在w3c的标准里约定,由client端在收到302后,自己根据头部location的url重新发起提交 建议去github的netcore项目里发一个issue提交,看看项目组怎么回复。
  • 打赏
  • 举报
回复
我现在的理解应该是NET CORE POST HTTPS无证书如何解决了。 因为NET 的时候无证书。直接返回true全部证书通过。即可。 但CORE这个方法就行了。但代码是对的。
  • 打赏
  • 举报
回复
AllowAutoRedirect =false; POST地址是https的。 我设置了不跳转。没有错误了。不过返回数据也没有了。
引用 4 楼 wanghui0380 的回复:
var httpClient = new HttpClient(new HttpClientHandler { AllowAutoRedirect = 你可以设定这里值 }); 302是重定向,现在啥启动了http自动转向的https,跨域的,都可能被重定向。所以你可以尝试设置 AllowAutoRedirect的值
NET 的时候 RemoteCertificateValidationCallback 这个方法有效。 不是知道是不是到了CORE就无效了
wanghui0380 2020-11-15
  • 打赏
  • 举报
回复
var httpClient = new HttpClient(new HttpClientHandler { AllowAutoRedirect = 你可以设定这里值 }); 302是重定向,现在啥启动了http自动转向的https,跨域的,都可能被重定向。所以你可以尝试设置 AllowAutoRedirect的值
泡泡龙 2020-11-14
  • 打赏
  • 举报
回复
两个程序分别抓一下包,看看header就知道了。 也可能一个是自动跳转,另一个不是自动跳转呢
  • 打赏
  • 举报
回复
同一段代码。NET可以执行的。CORE是无法执行的。 你的意思是说发送的内容不一样。
引用 1 楼 以专业开发人员为伍 的回复:
服务器端发送302关你的客户端代码什么事儿?除非是你发送的 http 消息不一样。 贴出你的 http 调试器获取的 http 上行消息内容(消息头和消息体)看看两种目标环境的程序发出的消息报文有什么不一样?!
  • 打赏
  • 举报
回复
服务器端发送302关你的客户端代码什么事儿?除非是你发送的 http 消息不一样。

贴出你的 http 调试器获取的 http 上行消息内容(消息头和消息体)看看两种目标环境的程序发出的消息报文有什么不一样?!

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧