2010-08-26 12 views
5

Primera publicación en alguna parte. Así que mejor que sea una buena.Cómo llamar a una URL externa desde una solución MVC de ASP.NET

Tengo una aplicación web ASP.NET MVC 2 en la que tengo un actionResult. Necesito hacer una llamada por mí.

Lo que pasa es que necesito esta A.R para manejar algunas operaciones de datos y luego necesito que llame a una URL externa que en realidad es un Módulo de compañía que maneja el envío de mensajes a los teléfonos de nuestra compañía.

sólo tiene que llamar a la URL que se ve así:

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

no necesito ningún mensaje de retorno o nada. Solo quiero llamar a esa URL externa que, por supuesto, está fuera del alcance de mi propia aplicación web. (No quiero redirigir). Esa URL debe llamarse detrás de la GUI sin que el usuario se dé cuenta. Y la página que están viendo no debe verse afectada.

he intentado con:

Server.Execute(url); 

Sin embargo no funcionó. He escuchado que algunas personas hacen esto al tener un iFrame oculto en la página. La configuración del src a la URL puede necesitar y luego de alguna manera ejecutar eso, para obtener la llamada instanciada. No me parece tan elegante, pero si esa es la única solución, ¿alguien tiene un ejemplo de cómo se hace eso? O si tienes una sugerencia más elegante, soy todo oídos.

Respuesta

6

por fin tengo trabajo con este pedazo de código:

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

Dado que usted no espera un valor devuelto de la URL, forma más sencilla es

  • después de la ejecución AR, utilice Webclient para desencadenar la URL
  • Ya sea por HTTP GET o POST (síncrona o asíncrona)

código de ejemplo

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

El muestra utiliza HTTP POST y llamada asincrónica (por lo que volverá inmediatamente después de activar la URL - No bloqueo)

+0

Así que básicamente sólo se necesita hacer esto, ya que no tengo necesidad de comprobar los progresos% o cosas por el estilo: Nota: Don ¿tienes uno? demasiados en la línea String sp = "npcgi ?? no ="? string phoneNumber = nextPatient.Handset.CallNumber; string messageToCallInPatient = "El médico está listo para verte en 5 minutos. Dirígete a la sala de espera"; 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, entiendo que no necesita manejar el progreso ... simplemente conviértalo en un manejador vacío, sin necesidad de escribir nada dentro de eso ....Y pruebe esto con su URL actual y hágamelo saber ... – RameshVel

+0

Entendí su ejemplo. Lo intenté sin tus manejadores de eventos pero aun así obtuve algunos errores. De hecho, creo que la URL generada fue defectuosa. Pero logré resolver el problema usando httpwebrequest. Ver mi código de trabajo a continuación. Gracias – Memphis

0

Puede usar simplemente "return Redirect (url);"

+0

Pero eso redireccionará a mi usuario de su página actual a la página externa. No quiero eso. Solo quiero ejecutar la URL externa, causa del mensaje de texto que se enviará a un teléfono. Todo tiene que suceder detrás de la GUI sin que el usuario vea nada o tenga que abandonar la página actual. – Memphis

Cuestiones relacionadas