2012-07-25 32 views
5

Estoy trabajando en una aplicación de consola que busca algunos datos y llama al método de acción MVC3 y pasa los datos obtenidos como un parámetro a ese método de acción. Pero mi problema es cómo conseguir la aplicación de consola sabe que los datos pasan con éxito \ MVC llamada a un método de acción correcta y el servidor de aplicaciones MVC se está ejecutando o noC# cómo llamar al método de acción MVC desde la aplicación de consola

aquí está mi código:

public static void Main() 
{ 
// Mvc application object intialization 
       HomeController object_Mail = new HomeController(); 
      // Mvc action method call 
      object_Mail.mailgateway(mvcemails); //mvcemails parameter passed to Actionmethod    
} 

favor, me guía .. .

Gracias, Raj

Respuesta

8

usted no puede invocar una acción MVC como usted ha hecho aquí, una aplicación de escritorio y aplicaciones web no están relacionados .. Ellos existen como dos entidades distintas .. Ahora, si necesita llamar a una acción mvc desde su aplicación de escritorio, es como llamar a cualquier otro punto final web utilizando su aplicación de escritorio y necesita crear una HTTPRequest ..

En su aplicación de escritorio, cree una HTTPRequest de la siguiente manera:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://"+ <your mvc action endpoint>) 
request.Method = "GET"; 
//specify other request properties 

try 
{ 
    response = (HttpWebResponse)request.GetResponse(); 
} 

si desea pasar algunos datos de sus parámetros es decir, de acción de acción se podría construir su URL de la siguiente manera:

Por petición GET

string url = string.Format(
      "http://mysite/somepage?key1={0}&key2={1}", 
      Uri.EscapeDataString("value1"), 
      Uri.EscapeDataString("value2")); 

y Por petición POST

webRequest.Method = "POST"; 
var data=string.Format("key1={0}&key2={1}",Uri.EscapeDataString("value1"),Uri.EscapeDataString("value2")"); 
StreamWriter requestWriter = new StreamWriter(webRequest.GetRequestStream()); 
requestWriter.Write(); 
requestWriter.Close(); 
+0

bien lo tengo, pero ¿cómo puedo pasar mi parámetro de objeto (Datos) al método de acción mvc utilizando el código anterior, es decir, httpwebrequest – Raj

+0

actualizado mi respuesta ... – Baz1nga

+0

@ Baz1nga Supongo que requestWriter.Write() tiene parámetros? –

0

Creo que es necesario utilizar WebClient o HttpWebRequest clase para invocar un método de acción.

0

Es posible hacer esto en la forma en que lo está haciendo. Sin embargo, la mayoría de las aplicaciones web tienen muchas dependencias que necesitaría aniquilar o simular utilizando un marco como Moq

Frecuentemente hago referencia al archivo DLL que contiene mis aplicaciones MVC en bibliotecas de prueba unitarias, lo cual es equivalente al escenario en que se encuentra describiendo Uso Moq para proporcionar un contexto de solicitud y otras dependencias requeridas por los controladores, como el estado de sesión, los repositorios de bases de datos, etc.

Si usa dependencias falsas, es posible que la acción de su controlador sea inútil. En ese caso, seguiría el consejo de las otras respuestas.

Este es un tema grande y complicado que se discute en muchos blogs y otras preguntas sobre stackoverflow acerca de la prueba unitaria asp.net mvc.

+0

que nunca mencionó que estaba haciendo esto para probar ... – Baz1nga

Cuestiones relacionadas