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