2010-08-26 1 views
5

Premier message inhere ever. Mieux vaut en faire un bon.Comment appeler une URL externe à partir d'une solution ASP.NET MVC

J'ai une application Web ASP.NET MVC 2 dans laquelle j'ai un actionResult J'ai besoin de faire un appel pour moi. Le fait est que j'ai besoin de cette A.R pour gérer certaines opérations de données et après j'en ai besoin pour appeler une URL externe qui est en fait un module d'entreprise qui gère l'envoi de messages vers les combinés téléphoniques de notre entreprise.

Il a juste besoin d'appeler l'URL qui ressemble à ceci:

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

Je ne ai pas besoin message de retour ou quoi que ce soit. Je veux juste appeler cette URL externe qui est bien sûr en dehors de la portée de ma propre application web. (Je ne veux pas rediriger). Cette URL doit être appelée derrière l'interface graphique sans que l'utilisateur s'en aperçoive. Et la page qu'ils consultent ne doit pas être affectée.

J'ai essayé avec:

Server.Execute(url); 

Cependant ne fonctionne pas. J'ai entendu dire que certains ppl vont à ce sujet en ayant un iFrame caché sur la page. Le réglage de la src à l'url peut avoir besoin, puis en quelque sorte l'exécuter, pour obtenir l'appel instancié. Cela ne me semble pas si élégant, mais si c'est la seule solution, quelqu'un a-t-il un exemple de la façon dont cela est fait? Ou si vous avez une suggestion plus élégante, je suis tout ouïe.

Répondre

6

Je l'ai finalement obtenu de travailler avec ce morceau de code:

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

Puisque vous ne vous attendez pas une valeur de retour de l'URL, plus simple est

  • Après l'exécution AR, utilisez Webclient pour déclencher l'URL
  • Soit par HTTP GET ou POST (synchrone ou asynchrone)

Exemple de code

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

Le exemple utilise HTTP POST et appel asynchrone (donc il reviendra immédiatement après le déclenchement de l'URL - non bloquant)

+0

Donc, fondamentalement, je dois seulement faire cela, puisque je n'ai pas besoin de vérifier les progrès% ou des trucs comme ça: Note: Don n'en avez-vous pas? trop dans la chaîne sp = "npcgi ?? no =" ligne? string phoneNumber = nextPatient.Handset.CallNumber; string messageToCallInPatient = "Le médecin est prêt à vous voir dans 5 minutes, veuillez vous rendre dans la salle d'attente"; chaîne url = "npcgi? No =" + numéro de téléphone + "& msg =" + messageToCallInPatient; WebClient wc = new WebClient(); Uri netPageUrl = nouvel Uri ("http://172.20.120.59/cgi-bin/"); wc.UploadDataAsync (netPageUrl, System.Text.Encoding.ASCII.GetBytes (url)); – Memphis

+0

@Memphis, je comprends que vous n'avez pas besoin de gérer la progression ... alors faites-en un gestionnaire vide, pas besoin d'écrire quoi que ce soit à l'intérieur ....Et essayez ceci avec vos URLs réels et faites le moi savoir ... – RameshVel

+0

J'ai compris votre exemple. Je l'ai essayé sans vos eventhandlers mais j'ai quand même eu quelques erreurs. Je pense en fait que l'URL générée était défectueuse. Mais j'ai réussi à résoudre le problème en utilisant httpwebrequest. Voir mon code de travail ci-dessous. Merci – Memphis

0

Vous pouvez simplement utiliser "return Redirect (url);"

+0

Mais cela redirigera mon utilisateur de sa page actuelle vers la page externe. Je ne veux pas ça. Je veux seulement exécuter l'URL externe, cause du message de texte qu'il enverra à un combiné. Je dois tout se passer derrière l'interface graphique sans que l'utilisateur ne voie quoi que ce soit ou quitte la page en cours. – Memphis

Questions connexes