Tengo un encargo para ActionResult devolver ciertos errores HTTP, como NotFoundResult y ForbiddenResult, todos ellos se derivan de ViewResult.
Permítame sugerir un manejo alternativo de error:
de inicio mediante la creación de un controlador de error y las vistas correspondientes:
public class ErrorController : Controller
{
public ActionResult General()
{
return View();
}
public ActionResult HttpError404()
{
return View();
}
public ActionResult HttpError500()
{
return View();
}
}
En Global.asax
definen el Application_Error
método:
protected void Application_Error(object sender, EventArgs e)
{
var exception = Server.GetLastError();
// TODO: Log the exception with your favorite logging framework
Response.Clear();
var httpException = exception as HttpException;
var routeData = new RouteData();
// Take the ErrorController
routeData.Values.Add("controller", "error");
if (httpException == null)
{
// Use the General action for any unhandled error
routeData.Values.Add("action", "general");
}
else
{
switch (httpException.GetHttpCode())
{
case 404:
routeData.Values.Add("action", "httpError404");
break;
case 500:
routeData.Values.Add("action", "httpError500");
break;
default:
routeData.Values.Add("action", "general");
break;
}
}
// Add the exception to route data so that the error controller
// could use it with RouteData.Values["error"]
routeData.Values.Add("error", exception);
Server.ClearError();
IController errorController = new ErrorController();
errorController.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
}
Finalmente arroje las excepciones apropiadas:
public class HomeController: Controller
{
public ActionResult Index(int id)
{
var model = _repository.GetModel(id);
if (model == null)
{
throw new HttpException(404, "Model not found with id = " + id);
}
return View(model);
}
}
¿Se refiere a "la vista no se procesa" o "mi navegador no la muestra?" Porque esas no son las mismas cosas. –
La respuesta de la aplicación es 0 bytes. No se escribe ninguna vista en la respuesta. –