C#.net winforms HTTP GET返回内部服务器错误(500)
通过Fiddler或Postman进行请求,两者都返回成功的结果,而从调试模式进行请求时,始终返回内部服务器错误(500) 到目前为止我所做的: 使用Fiddler v4.6.20172.34691: 以下是示例请求: 以下是示例响应: 使用Postman v6.1.3: 以下是请求和响应示例: 对于visual studio部分: Form1代码初始化部分:C#.net winforms HTTP GET返回内部服务器错误(500),c#,.net,httpwebrequest,C#,.net,Httpwebrequest,通过Fiddler或Postman进行请求,两者都返回成功的结果,而从调试模式进行请求时,始终返回内部服务器错误(500) 到目前为止我所做的: 使用Fiddler v4.6.20172.34691: 以下是示例请求: 以下是示例响应: 使用Postman v6.1.3: 以下是请求和响应示例: 对于visual studio部分: Form1代码初始化部分: urlparameters = @"?account=" + username;
urlparameters = @"?account=" + username;
url = "https://" + platform + "/Home/CheckRegAccountAvailable" + urlparameters;
method = "GET";
httpwebrequest的clsHttp.cs初始化:
request = (HttpWebRequest)WebRequest.Create(_url);
request.Timeout = _timeout;
request.Method = _method;
request.ContentType = _responsetype;
if (_method != "GET")
{
if (_contentlength > 0)
{
request.ContentLength = _contentlength;
}
if (_isrequestbody)
{
using (var streamWriter = new StreamWriter(request.GetRequestStream()))
{
streamWriter.Write(_requestbody);
streamWriter.Flush();
streamWriter.Close();
}
}
}
clsHttp.cs获取响应:
string result = "", _msg = "";
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
using (Stream stream = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(stream))
{
result = reader.ReadToEnd();
}
_msg = "Received response...";
Console.WriteLine(_msg);
if (_isLog)
doLogToFile(_filename, _fileextension, _path, _msg);
if (_isUIRTBLog)
rtb_AppendText(_rtb, _msg + "\r\n");
Console.WriteLine(_msg);
}
}
提前谢谢
[更新1]
似乎设置用户代理有效,出于某种原因这是服务器问题吗
[更新2]
以下是示例WebException。如果未包含返回内部服务器错误(500)的用户代理,则会得到响应:
CharacterSet:“utf-8”ContentEncoding:“ContentLength:36213 ContentType:“text/html;charset=utf-8”Cookies:{System.Net.CookieCollection}头:{内容长度:36213缓存控制:私有内容类型:text/html;charset=utf-8 Set Cookie:ASP.NET_SessionId=vjxdzvk43vxif4kkviib5vio;path=/;HttpOnly,locale=zh CN;path=/;HttpOnly,locale=vjxdzvzdzvkviib5vio;path=/;HttpOnly,locale=zh CN;path=/;HttpOnly,u RequestVerificationToken=sug0cf0m-t29bmg8zglggdmst1juwfuzz30mdzwadxfsqbmp8ql9vdbxc-d0cLvgpBiCydvrRk8lvZrStzp6e7cyQ1;path=/;HttpOnly,ARRAffinity=e5596f2f9da07a50d20d293b25a04f89be0f0552dbf622b9a924c6d5d272eff4;path=/;HttpOnly;Domain=www.iwin98.com服务器:Microsoft IIS/10.0 X-AspNetMvc-Version:
5.2 X-Frame-Options:SAMEORIGIN,SAMEORIGIN,SAMEORIGIN X-AspNet-Version:4.0.30319 X-Powered-By:ASP.NET日期:2018年5月29日星期二01:19:08 GMT
}
IsFromCache:false IsMutuallyAuthenticated:false LastModified:{5/29/2018 9:19:17 AM}方法:“GET”协议版本:{1.1}响应URI:{}服务器:“Microsoft IIS/10.0”状态代码:InternalServerError状态描述:“内部服务器错误”SupportsHeaders:true您的代码未设置用户代理请求标头,并且请求的URL可能不太智能,无法预期没有用户代理的请求。它可能在内部引发NullReferenceException 将此添加到您的代码中:
request.UserAgent="Some value"
或者,如果您可以控制服务器,请修复它。那么500的响应主体是什么?邮递员请求和通过代码发出的请求之间有什么区别?您确实看到没有设置用户代理吗?我无法获取响应主体,它已经在这一部分返回错误:using(HttpWebResponse=(HttpWebResponse)request.GetResponse())。通过使用这些第三方应用程序,他们返回了结果,因此我想知道我是否遗漏了代码中的某些内容。HttpWebRequest是否必须使用用户代理?我最近做了很多HTTP请求,但我没有设置用户代理,它们工作正常。您可以通过错误响应获取响应正文。通过或通过letting您的请求流经Fiddler并在那里进行检查。不,不需要用户代理,但如果这是工作请求和非工作请求之间的唯一区别,那么您可以尝试一下。可能是一些服务器端软件假定它已设置。@CodeCaster,我已更新了问题并设置了用户代理,似乎可以解决问题。@Pavlinll,我将添加用户代理部分并进行一些测试,对于服务器部分,我们无法控制它。似乎添加用户代理可以解决问题,如果没有设置用户代理,这是服务器问题吗?是的,这是服务器写得不好的问题,每次都会有可选的UserAgent头被填充。好的,这是值得注意的,下次我删除再次使用其他http请求,我将在标题中包含用户代理,再次感谢。