2010-08-26 6 views
5

Primo post in assoluto. Quindi meglio renderlo buono.Come chiamare un URL esterno da una soluzione MVC ASP.NET

Ho un'applicazione Web ASP.NET MVC 2 in cui ho un'azioneRisultato che è necessario effettuare una chiamata per me.

La cosa è che ho bisogno di questo A.R per gestire alcune operazioni di dati e dopo di che ho bisogno di chiamare un URL esterno che è in realtà un modulo aziendale che gestisce l'invio di messaggi ai nostri telefoni cellulari aziendali.

ha solo bisogno di chiamare l'URL che assomiglia a questo:

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

io non bisogno di alcun messaggio di ritorno o nulla. Voglio solo chiamare quell'URL esterno che è ovviamente al di fuori della mia applicazione web. (Non voglio reindirizzare). Quell'URL deve essere chiamato dietro la GUI senza che l'utente se ne renda conto. E la pagina che stanno visualizzando non deve essere influenzata.

ho provato con:

Server.Execute(url); 

Tuttavia non ha funzionato. Ho sentito che alcuni ppl fanno questo avendo un iFrame nascosto nella pagina. L'impostazione di src all'URL potrebbe essere necessaria e quindi eseguirla in qualche modo, per ottenere l'istanza della chiamata. Non mi sembra così elegante, ma se questa è l'unica soluzione, qualcuno ha un esempio su come è fatto. O se hai un suggerimento più elegante, sono tutto orecchie.

risposta

6

ho finalmente capito di lavoro con questo pezzo di codice:

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

Dal momento che non ci si aspetta un valore di ritorno dall'URL, modo più semplice è

  • dopo l'esecuzione AR, utilizzare Webclient per innescare l'URL
  • Sia per HTTP GET o POST (sincrona o asincrona)

codice di esempio

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); 

Il sample usa HTTP POST e Asynchronous call (Quindi ritornerà immediatamente dopo aver attivato l'URL - Non bloccante)

+0

Quindi, in pratica ho solo bisogno di fare questo, dal momento che non ho bisogno di verificare i progressi% o cose del genere: Nota: Don ne hai uno? " troppi nella stringa sp = "npcgi ?? no =" linea? string phoneNumber = nextPatient.Handset.CallNumber; string messageToCallInPatient = "Il medico è pronto a vederti tra 5 minuti. Procedi nell'area di attesa"; 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

+0

@Memphis, ho capito che non è necessario gestire il progresso ... quindi basta renderlo un gestore vuoto, non c'è bisogno di scrivere nulla all'interno di questo ....E prova questo con i tuoi URL reali e fammi sapere ... – RameshVel

+0

Ho capito il tuo esempio. L'ho provato senza i tuoi eventhandler, ma ho ancora degli errori. In realtà penso che l'URL generato sia difettoso. Ma sono riuscito a risolvere il problema usando httpwebrequest. Vedi il mio codice di lavoro qui sotto. Grazie – Memphis

0

Puoi semplicemente usare "return Redirect (url);"

+0

Ma questo reindirizzerà il mio utente dalla sua pagina corrente alla pagina esterna. Non lo voglio Voglio solo eseguire l'URL esterno, a causa del messaggio di testo che invierà a un telefono. Devo tutti accadere dietro la GUI senza che l'utente abbia mai visto nulla o debba lasciare la pagina corrente. – Memphis