encontré otra pregunta publicada aquí que proporcionó una solución a la primera parte de mi pregunta, es decir, cómo generar una página 404 en ASP.NET MVC SIN redirigir a otra página (por lo que la url solicitada originalmente permanece en la barra de direcciones).Lanzando un 404 como StackOverflow, sin redirección, al usar IOCControllerFactory
ASP.NET MVC - How to throw a 404 page similar to that on StackOverflow
protected void Application_Error(object sender, EventArgs e)
{
var exception = Server.GetLastError();
Response.Clear();
var httpException = exception as HttpException;
var routeData = new RouteData();
routeData.Values.Add("controller", "Error");
if (httpException != null)
{
routeData.Values.Add("action", httpException.GetHttpCode() == 404 ? "NotFound" : "Unknown");
// clear the error, otherwise, we will always get the default error page.
Server.ClearError();
// call the controller with the route
IController errorController = new ErrorController();
errorController.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
}
}
El lado 404 de cosas funciona bien para mí si yo no uso un IOCControllerFactory, pero tan pronto como lo hago utilizar una fábrica, el código de error en global.asax
no es usado y en su lugar me sale el siguiente error:
The IControllerFactory 'MyNamespace.IOCControllerFactory' did not return a controller for the name 'blah'.
¿Cómo consigo alrededor de esto, sin recurrir a deshacerse de mi controllerfactory, y la creación de un constructor sin parámetros para cada uno de mi contr Ollers?
Ver [este mensaje] (http://stackoverflow.com/questions/619895/how-can-i-properly-handle-404-in-asp-net-mvc/7967759#7967759), que es un ejemplo de una solución de página de error 404 personalizada que utiliza atributos de filtro ASP.Net MVC. Esta solución también evita los mensajes 302/200 en el navegador. El navegador obtiene una respuesta 404. –