WebClient.DownloadString在网站中失败,否则工作
本文关键字:工作 失败 DownloadString 网站 WebClient | 更新日期: 2023-09-27 18:36:58
在我们的MVC 5站点中,我们有一个VerifyEmail
方法,可以联系服务以检查电子邮件是否存在。我们进行基本的初步检查,以确保它看起来像有效的电子邮件等,然后将其传递给服务。
我们正在使用WebClient.DownloadString()
函数。当我们导航到相应的视图并触发该方法时,我们会收到以下错误:
调试时:
<h2>Bad Request - Invalid Hostname</h2>
<hr><p>HTTP Error 400. The request hostname is invalid.</p>
当我们不调试时,我们得到这个:
System.Net.WebException: 无法连接到远程服务器---> System.Net.Sockets.SocketException:无法建立连接,因为目标计算机主动拒绝了它 127.0.0.1:63595
at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket&socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Exception& exception)
---内部异常堆栈跟踪结束---
如果我从 LinqPad 调用该方法 ( VerifyEmailOrgEmailVerificationClient.VerifyEmail
),它可以工作!!
我明白这个:
MX record about emailserver.com exists.<br/>
Connection succeeded to emailserver-com.mail.protection.outlook.com SMTP.<br/>
220 SN1NAM01FT022.mail.protection.outlook.com Microsoft ESMTP MAIL Service ready at Mon, 29 Feb 2016 21:08:50 +0000<br/>
> HELO verify-email.org<br/>
250 SN1NAM01FT022.mail.protection.outlook.com Hello [verify-email.org]<br/>
> MAIL FROM: <check@verify-email.org><br/>
=250 2.1.0 Sender OK<br/>
> RCPT TO: <redacted@emailserver.com><br/>
=250 2.1.5 Recipient OK<br/>
这就是我们应该得到的。因此,代码在 LinqPad 中工作,但当我们将其称为网站时则不然。我们将测试方法放在一起并得到相同的结果。通过我们的测试,我们只是想得到WebClient.DownloadString()
的回应。即使这样,我们也会遇到错误。
这是我们的测试方法:
using System;
using System.IO;
using System.Net;
using System.Web.Mvc;
using PublicationSystem.ViewModels;
namespace TestWebClient.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
var newModel = new TestViewModel();
using (var webClient = new WebClient())
{
webClient.Encoding = System.Text.Encoding.UTF8;
webClient.Headers["Content-Type"] = "application/json;charset=UTF-8";
var requestUrl = string.Empty;// GetRequestUrl(email);
try
{
requestUrl =
"http://api.verify-email.org/api.php?usr=igiglobal&pwd=emailsareweak&check=mkenyon@mkptechnologies.com";
newModel.ResponseString = webClient.DownloadString(requestUrl);
}
catch (WebException exception)
{
string responseText;
if (exception.Response != null)
{
using (var reader = new StreamReader(exception.Response.GetResponseStream()))
{
responseText = reader.ReadToEnd();
}
newModel.ResponseString = responseText;
}
else
{
newModel.ResponseString = exception.ToString();
}
}
catch (Exception exception)
{
newModel.ResponseString = exception.ToString();
}
}
return View(newModel);
}
我们的应用程序池设置为.Net 4.0。该应用程序针对 .Net 4.5 进行编译。我们正在使用 MVC 5。
知道为什么我们的方法,特别是WebClient.DownloadString()在我们运行站点时失败,但是如果我们从LinqPad调用代码就可以工作吗?
更新:我用Visual Studio 2013创建了一个新的MVC项目,就像这个项目一样。在新的测试项目中,我粘贴了相同的代码,并尝试使引用尽可能完全匹配。我的代码在测试项目中工作。因此,我的项目的设置方式阻止了WebClient.DownloadString()
。使用 Fiddler,看起来它甚至没有发送请求。
是否有可以在测试 MVC 站点时阻止WebClient.DownloadString()
的设置?
更新2:在web.config中,我找到了这个。难道是这样?
<system.net>
<defaultProxy>
<proxy proxyaddress="http://localhost:63595/" />
</defaultProxy>
</system.net>
在web.config中,我找到了这个。注释掉它WebClient.DownloadString()
再次工作。希望这对某人有所帮助。我将不得不对此做更多的研究。
<system.net>
<defaultProxy>
<proxy proxyaddress="http://localhost:63595/" />
</defaultProxy>
</system.net>