sábado, 8 de diciembre de 2012

REST EXCEPTIONS CON MVC

A continuacion como trabajar con las exceptions de rest en MVC.
Primer Paso.-
En nuestra capa de nuestro servicio REST vamos a capturar el error de la  excepcion, para nuestro caso vamos a validar que no se permita crear un nuevo recurso si en caso este ya existiera en la BD , a continuacion la linea de codigo para dicha implementacion

public Recurso CrearRecurso(Recurso recursoACrear)
        {
            var existe = ObtenerRecurso(recursoACrear.Codigo);
            if (existe != null)
                throw new WebFaultException<string>("El Recurso que intento Ingresar Ya Existe!!!", HttpStatusCode.NotFound);
            return dao.Crear(recursoACrear);
        }

 Segundo Paso.-
 En nuestro capa MVC de nuestra capa controller capturaremos la excepcion que nos devuelve el servicio, para el caso de servicio REST el tipo de excepcion es WebException como se muestra a continuacion


[HttpPost]
        public ActionResult Create(FormCollection collection)
        {
            try
            {
                if (collection["codigo"] == null || collection["codigo"].Trim().Equals("") || collection["nombre"] == null || collection["precio"]==null)
                {
                 TempData["mensaje"] = "Ingrese todos los datos por favor";
                 HttpWebRequest req1 = (HttpWebRequest)WebRequest
               .Create("http://localhost:5158/Tipos.svc/Tipos");
                 req1.Method = "GET";
                 HttpWebResponse res1 = (HttpWebResponse)req1.GetResponse();
                 StreamReader reader1 = new StreamReader(res1.GetResponseStream());
                 string tipoJson = reader1.ReadToEnd();
                 JavaScriptSerializer js1 = new JavaScriptSerializer();
                 List<Tipo> tipos = js1.Deserialize<List<Tipo>>(tipoJson);
                 var list = new SelectList(tipos, "Codigo", "Nombre");
                 ViewData["tipos"] = list;
                  return View("Create");
                }
                string postdata = "{\"Codigo\":\"" + collection["Codigo"] + "\",\"Nombre\":\"" + collection["nombre"] + "\" ,\"Precio\":\"" + collection["precio"] + "\",\"Tipo\":\"" + collection["tipos"] + "\" }";
                byte[] data = Encoding.UTF8.GetBytes(postdata);
                HttpWebRequest req = (HttpWebRequest)WebRequest
                    .Create("http://localhost:5158/Recursos.svc/Recursos");
                req.Method = "POST";
                req.ContentLength = data.Length;
                req.ContentType = "application/json";
                var reqStream = req.GetRequestStream();
                reqStream.Write(data, 0, data.Length);
                HttpWebResponse res = null;
                res = (HttpWebResponse)req.GetResponse();
                StreamReader reader = new StreamReader(res.GetResponseStream());
                string recursoJson = reader.ReadToEnd();
                JavaScriptSerializer js = new JavaScriptSerializer();
                Recurso recursoCreado = js.Deserialize<Recurso>(recursoJson);
                return RedirectToAction("Index");
            }catch (WebException e)
                {
                    HttpWebResponse resError = (HttpWebResponse)e.Response;
                    StreamReader reader2 = new StreamReader(resError.GetResponseStream());
                    string error = reader2.ReadToEnd();
                    JavaScriptSerializer js = new JavaScriptSerializer();
                    string errorMessage = js.Deserialize<string>(error);
                    TempData["mensaje"] = errorMessage;

                    HttpWebRequest req = (HttpWebRequest)WebRequest
                .Create("http://localhost:5158/Tipos.svc/Tipos");
                    req.Method = "GET";
                    HttpWebResponse res = (HttpWebResponse)req.GetResponse();
                    StreamReader reader = new StreamReader(res.GetResponseStream());
                    string tipoJson = reader.ReadToEnd();
                    JavaScriptSerializer js1 = new JavaScriptSerializer();
                    List<Tipo> tipos = js1.Deserialize<List<Tipo>>(tipoJson);
                    var list = new SelectList(tipos, "Codigo", "Nombre");
                    ViewData["tipos"] = list;
                    return View("Create");

                }

        }




Tercer Paso.-
Finalmente en nuestra capa vista(aspx) crearemos un etiqueta para almacenar el mensaje que obtengamos de nuestra clase controller proveniente de nuestro servicio REST como se muestra a continuacion

<h3 style="color:Red"><%= TempData["mensaje"] %></h3>

 

No hay comentarios:

Publicar un comentario