Znalazłem tu inne pytanie, które stanowiło rozwiązanie pierwszej części mojego pytania, czyli jak wygenerować stronę 404 w ASP.NET MVC BEZ przekierowania do innej strony (więc pierwotnie żądany adres URL pozostaje w pasku adresu).Rzucanie 404 jak StackOverflow, bez przekierowania, podczas korzystania 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));
}
}
boczna 404 rzeczy działa dobrze dla mnie, gdybym nie używać IOCControllerFactory, ale jak tylko zrobić użyć fabryki, kod błędu nie jest w global.asax
używany, a zamiast tego pojawia się następujący błąd:
The IControllerFactory 'MyNamespace.IOCControllerFactory' did not return a controller for the name 'blah'.
Jak mogę obejść ten problem, bez uciekania się do pozbycia mojego controllerfactory i tworzenie konstruktora bez parametrów dla każdego z moim kontr ollers?
patrz [ten post] (http://stackoverflow.com/questions/619895/how-can-i-properly-handle-404-in-asp-net-mvc/7967759#7967759), który jest przykładem niestandardowego rozwiązania strony błędu 404 przy użyciu atrybutów filtru ASP.Net MVC. To rozwiązanie pozwala również uniknąć przesyłania komunikatów 302/200 do przeglądarki. Przeglądarka otrzymuje odpowiedź 404. –