2010-08-26 93 views
5

有史以来第一篇文章。所以最好做一个好的。如何从ASP.NET MVC解决方案调用外部URL

我有,我有一个ActionResult我需要为我做一个呼叫的ASP.NET MVC 2的Web应用程序。

的事情是我需要这个A.R处理一些数据的操作之后,我需要它来调用它实际上是一个公司模块,处理邮件发送到我们公司的手机电话的外部URL。

它只是需要调用看起来像这样的网址:

string url = "http://x.x.x.x/cgi-bin/npcgi?no=" + phoneNumber + "&msg=" + message; 

我不需要任何回报的消息或任何东西。只是想调用那个当然不在我自己的Web应用程序范围内的外部URL。 (我不想重定向)。必须在GUI之后调用该URL,而用户不会意识到。而且他们正在查看的页面不得受到影响。

我试着用:

Server.Execute(url); 

但没有奏效。我听说有些人通过在页面上隐藏iFrame来解决这个问题。将src设置为url可能需要,然后以某种方式执行该操作,以实现呼叫实例化。它对我来说似乎不那么优雅,但如果这是唯一的解决方案,没有人有一个例子来说明如何做。或者,如果你有一个更圆滑的建议,我全是耳朵。

回答

6

我终于得到它与这段代码工作:

string messageToCallInPatient = "The doctor is ready to see you in 5 minutes. Please wait outside room " + roomName; 
string url = "http://x.x.x.x/cgi-bin/npcgi?no=" + phoneNumber + "&msg=" + 
       messageToCallInPatient; 
HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(string.Format(url)); 
webReq.Method = "GET"; 
HttpWebResponse webResponse = (HttpWebResponse)webReq.GetResponse(); 

//I don't use the response for anything right now. But I might log the response answer later on. 
Stream answer = webResponse.GetResponseStream(); 
StreamReader _recivedAnswer = new StreamReader(answer); 
1

既然你不期望从URL中的返回值,最简单的方法是

  • 的AR执行后,使用Webclient通过HTTP GET或POST(同步或异步触发URL
  • 无论是)

示例代码

WebClient wc = new WebClient(); 
    wc.UploadProgressChanged += (sender, evtarg) => 
      { 
       Console.WriteLine(evtarg.ProgressPercentage); 
      }; 

     wc.UploadDataCompleted += (sender, evtarg) => 
      { 
       String nResult; 
       if (evtarg.Result != null) 
       { 
        nResult = Encoding.ASCII.GetString(evtarg.Result); 
        Console.WriteLine("STATUS : " + nResult); 
       } 
       else 
        Console.WriteLine("Unexpected Error"); 

      }; 


     String sp= "npcgi??no=" + phoneNumber + "&msg=" + message; 
     System.Uri uri = new Uri("http://x.x.x.x/cgi-bin/"); 
     wc.UploadDataAsync(uri, System.Text.Encoding.ASCII.GetBytes(sb); 

的示例使用HTTP POST和异步调用(因此,这将触发URL后立即返回 - 非阻塞)

+0

所以基本上我只需要做到这一点,因为我有没有必要检查进度%或类似的东西: 注:唐你没有吗?“字符串中太多sp =“npcgi ?? no =”行? string phoneNumber = nextPatient.Handset.CallNumber; string messageToCallInPatient =“医生已准备好在5分钟内见你,请前往等候区”; string url =“npcgi?no =”+ phoneNumber +“&msg =”+ messageToCallInPatient; WebClient wc = new WebClient(); Uri netPageUrl = new Uri(“http://172.20.120.59/cgi-bin/”); wc.UploadDataAsync(netPageUrl,System.Text.Encoding.ASCII.GetBytes(url)); – Memphis 2010-08-26 07:28:42

+0

@Memphis,我明白你不需要处理进度...然后只是让它成为一个空处理程序,不需要在里面写任何东西....并尝试与您的实际URLS并让我知道... – RameshVel 2010-08-27 04:39:16

+0

我明白你的例子。我确实尝试过没有你的事件处理程序,但仍然有一些错误。我其实认为生成的网址有问题。但我设法使用httpwebrequest来解决问题。请参阅下面的工作代码。 谢谢 – Memphis 2010-08-30 06:19:10

0

您可以使用简单的“返回重定向(网址);”

+0

但是,这将重定向我的用户从他们的当前页面到外部页面。我不想那样。我只想执行外部URL,它将发送给手机的文本消息的原因。我不得不在用户界面后面发生任何事情,或者不得不离开当前页面。 – Memphis 2010-08-26 07:34:14