在C#中循环访问多个URL

时间:2012-10-06 08:54:33

标签: c# asp.net

我正在整合第三方短信应用程序。要求是在我网站的网页上点击按钮,向10个手机号码发送短信。

我们已经提供了一个URL,我们必须在其中添加要发送的电话号码和消息。该网址一次只接受 ONE 电话号码。

我有一个电话号码列表,我必须逐个发送相同的消息。 在循环浏览列表时,我会在网址中添加一个电话号码,并在每次迭代中执行 Response.Redirect(url)

但是这只会在第一次发生 Response.Redirect() 时发送短信到列表中的第一个电话号码,它会将浏览器带到指定网址指定的外部网站,其余部分用于循环未执行,即其余的电话号码未嵌入网址。

string[] phNos = { "91999999998", "91999999996" ,"91999999995"}; // Sample Mobile nos.

for(int i=0;i<phNos.Length;i++)
{

url = "baseurl/PushURL.fcgi?0&mobileno=" + phNos[i] + "&message="+ masg;

Response.Redirect(url);

}

我读到了 Server.Transfer() ,但这不能用于发送到外部网站。 我的要求可行吗?请帮助我如何实现它。

3 个答案:

答案 0 :(得分:5)

当您发现时,Response.Redirect会将用户浏览器重定向到给定的网址。

您要做的是让您的服务器使用服务器到服务器的通信来访问所需的URL。您可以使用WebClient轻松完成此操作。

var cli = new System.Net.WebClient();
for(int i=0;i<phNos.Length;i++)
{
    url = "baseurl/PushURL.fcgi?0&mobileno=" + phNos[i] + "&message="+ masg;
    cli.DownloadString(url);
}

请注意,这将检索网址,有效地调用API,顺序同步,这可能不是您想要的。如果要并行执行,可以在WebClient上使用DownloadStringAsync,但是您需要编写一种机制,让您等到所有请求完成。这取决于您想要什么,可能有多少数字以及您的性能限制。

答案 1 :(得分:2)

我建议使用HttpWebRequest或WebClient

例如

for(int i=0;i<phNos.Length;i++)
{
  try
  {
    url = "baseurl/PushURL.fcgi?0&mobileno=" + phNos[i] + "&message="+ masg;

    Uri targetUri = new Uri(url);
    System.Net.HttpWebRequest hwb;
    hwb = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(targetUri);
    hwb.GetResponse();
  }
  catch (...)
  { // error handling
  }
}

答案 2 :(得分:1)

此类过程应由webservice / WCF(在应用程序服务器上)执行,因此使用上面的webclient,但asp.net页面应调用WCF服务来执行您需要的操作。

即使有可能,网页也不是真的适合这种事情。