Ich habe eine benutzerdefinierte Action für bestimmte HTTP-Fehler Rückkehr, wie NotFoundResult und ForbiddenResult, sie alle von Viewresult ableiten.
Erlauben Sie mir, Ihnen eine alternative Fehlerbehandlung vorschlagen:
starten durch einen Fehler Controller erstellen und die entsprechenden Ansichten:
public class ErrorController : Controller
{
public ActionResult General()
{
return View();
}
public ActionResult HttpError404()
{
return View();
}
public ActionResult HttpError500()
{
return View();
}
}
In Global.asax
die Application_Error
Methode definieren:
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));
}
Schließlich passende Ausnahmen werfen:
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);
}
}
Meinst du "die Ansicht wird nicht gerendert" oder "mein Browser zeigt sie nicht an?" Weil das nicht die gleichen Dinge sind. –
Die Antwort von der App ist 0 Bytes. In die Antwort wird keine Ansicht geschrieben. –