我正在尝试从我的C#代码中获取服务的JSON响应。我生成了URL,并将其传递给webClient.DownloadString
方法,然后返回400错误。我可以将URL复制到浏览器中并获得正确的响应。
我可能会遗失什么?
以下是代码:
using (var webClient = new WebClient())
{
try
{
var requestUrl = GetRequestUrl(email);
// Error here
var jsonResponse = webClient.DownloadString(requestUrl);
//...
}
catch (Exception exception)
{
// ...
}
}
以下是从GetRequestUrl(email)
生成的URL的示例,它返回一个字符串。 (某些值被编辑)
http://api.someservice.org/api.php?usr=xxxxyyyy&pwd=zzz2345mmm22&check=none@nowhere.com
以下是我从浏览器获得的实际网址。
{"authentication_status":1,"limit_status":0,"limit_desc":"Not Limited","verify_status":1,"verify_status_desc":"MX record about nowhere.com exists.Connection succeeded to nowhere-com.mail.protection.outlook.com SMTP.220 BN3NAM01FT045.mail.protection.outlook.com Microsoft ESMTP MAIL Service ready at Mon, 29 Feb 2016 14:52:44 +0000\n> HELO verify-email.org250 BN3NAM01FT045.mail.protection.outlook.com Hello [verify-email.org]\n> MAIL FROM: <check@verify-email.org>=250 2.1.0 Sender OK\n> RCPT TO: <none@nowhere.com>=250 2.1.5 Recipient OK\n"}
更新:以下是GetRequestUrl的作用:
protected string GetRequestUrl(string email)
{
if (string.IsNullOrEmpty(email))
throw new ArgumentNullException("email");
var requestUrl = string.Format("http://api.someservice.org/api.php?usr={0}&pwd={1}&check={2}", ApiUsername, ApiPassword, Uri.EscapeUriString(email));
return requestUrl;
}
UPDATE:这是异常消息,InnerException为NULL。
远程服务器返回错误:(400)错误请求。
UPDATE:捕获WebException,并获得完整的ResponseStream。我不认为这个电话实际上已经出去了,Fiddler没有接到该地址的电话。这是例外。响应:
<h2>Bad Request - Invalid Hostname</h2>
<p>HTTP Error 400. The request hostname is invalid.</p>