Как упоминалось в gbianchi, вы можете сделать перенаправление customErrors следующим образом:
<customErrors mode="On" redirectMode="ResponseRedirect" defaultRedirect="/404" />
Однако это приведет к раздражающей строке запроса с исходным путем и сегментом.
Если это приложение ASP.NET, вы можете перегрузить событие Application_Error в файле Global.asax.cs.Вот хакерский способ сделать это в MVC:
protected void Application_Error() {
var exception = Server.GetLastError();
var httpException = exception as HttpException;
if (httpException == null) {
return;
}
var statusCode = httpException.GetHttpCode();
// HACK to get around the Request.Path errors from invalid characters
if ((statusCode == 404) || ((statusCode == 400) && httpException.Message.Contains("Request.Path"))) {
Response.Clear();
Server.ClearError();
var routeData = new RouteData();
routeData.Values["controller"] = "Error";
routeData.Values["exception"] = exception;
Response.StatusCode = statusCode;
routeData.Values["action"] = "NotFound";
// Avoid IIS7 getting in the middle
Response.TrySkipIisCustomErrors = true;
IController errorsController = new ErrorController();
HttpContextWrapper wrapper = new HttpContextWrapper(Context);
var rc = new RequestContext(wrapper, routeData);
errorsController.Execute(rc);
}
}