Como llamar a un Action Method MVC desde Silverlight

Trabajando en un proyecto que integra Silverlight y ASP.NET MVC, tuve la necesidad de hacer algo “extrano”, bueno quiza extrano para algunos. Necesite recuperar informacion que esta disponible en el contexto de MVC desde Silverlight, lo pongamos simple: Necesite llamar a un metodo, en este caso un ActionController desde el codigo de Silverlight.

En internet pueden encontrar muchos ejemplos, pero la gran mayoria son para realizar llamdas GET y considerando que quiero darle un poquitin mas de seguridad, pue mi requerimiento es solo permitir invocaciones POST…. y que dijeron? pues no hay muchos ejemplos clarificadores, entonces aqui va el mio.

A continuacion el ActionMethod que quiero invocar dese Silverlight:

1 [AcceptVerbs(HttpVerbs.Post)] 2 public ActionResult GetContextInformation() 3 { 4 return new Json(new ServiceConfiguration() 5 { 6 FullName = "UnknowData" 7 }); 8 }

La clase ServiceConfiguration, puede ser tan simple como la que se muestra a continuacion o tan compleja como deseemos. Esta clase es serializada a JSON para poder enviarla hacia Silverlight.

1 public class ServiceConfiguration 2 { 3 public string FullName { get; set; } 4 }

He aqui el codigo de Silverlight, para la invocacion del anterior ActionMethod:

 

1 private void GetWithWebRequest(string url) 2 { 3 var r = HttpWebRequest.Create(url) as HttpWebRequest; 4 r.Method = "POST"; 5 r.Accept = "application/json"; 6 r.BeginGetResponse(ReturnContext, r); 7 } 8 9 private void ReturnContext(IAsyncResult ar) 10 { 11 var request = ar.AsyncState as HttpWebRequest; 12 if (request != null) 13 { 14 var response = request.EndGetResponse(ar); 15 var jsonSerializer = new DataContractJsonSerializer(typeof(ServiceConfiguration)); 16 using (var stream = response.GetResponseStream()) 17 { 18 ServiceConfiguration ContextConfiguration = jsonSerializer.ReadObject(stream) as ServiceConfiguration; 19 } 20 //this.Dispatcher.BeginInvoke(() => 21 // PostRetrieved(Post)); 22 } 23 //if (OnInitializeServices != null) 24 // OnInitializeServices(this, EventArgs.Empty); 25 }

Aunque Resharper me sugiere reemplazar la invocacion de HttpWebRequest por una clase mas especifica como WebRequest, pues esta vez no le hago caso. Tambien observaran unos trozos de codigo comentado en el AsyncCallBack,, bueno estos los dejo para una explicacion futura. En este ejemplo no estoy pasando parametros al ActionMethod, pero podran encontrar bastante informacion de como hacerlo en Internet. El codigo es perfectamente compatible y usable con Windows Phone 7.

 

Espero que les sea util.

Un abrazo


Un comentario en “Como llamar a un Action Method MVC desde Silverlight

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *