Asp.NET MVC Hata Sayfasına Yönlendirme
ErrorController
public class ErrorController : Controller
{
public ActionResult ErrorPage(Exception exception)
{
Response.TrySkipIisCustomErrors = true;
return View();
}
public ActionResult ErrorPage404()
{
Response.StatusCode = 404;
Response.TrySkipIisCustomErrors = true;
return View();
}
public ActionResult ErrorPage403()
{
Response.StatusCode = 403;
Response.TrySkipIisCustomErrors = true;
return View();
}
}
web.config ayarları
<system.webServer>
<handlers>
<remove name="BlockViewHandler"/>
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="404" subStatusCode="-1"/>
<error statusCode="404" path="Error/ErrorPage404" responseMode="ExecuteURL"/>
<remove statusCode="403" subStatusCode="-1"/>
<error statusCode="403" path="Error/ErrorPage403" responseMode="ExecuteURL"/>
</httpErrors>
</system.webServer>
<system.web>
<customErrors mode="RemoteOnly" defaultRedirect="Error">
<error statusCode="404" redirect="ErrorPage404"/>
<error statusCode="403" redirect="ErrorPage403"/>
</customErrors>
</system.web>
Global.asax ayarları
protected void Application_EndRequest()
{
if (Context.Response.StatusCode == 404)
{
Response.Clear();
var rd = new RouteData();
rd.Values["controller"] = "Error";
rd.Values["action"] = "ErrorPage404";
IController c = new ErrorController();
c.Execute(new RequestContext(new HttpContextWrapper(Context), rd));
}
else if (Context.Response.StatusCode == 403)
{
Response.Clear();
var rd = new RouteData();
rd.Values["controller"] = "Error";
rd.Values["action"] = "ErrorPage403";
IController c = new ErrorController();
c.Execute(new RequestContext(new HttpContextWrapper(Context), rd));
}
}