Бросать 404, как StackOverflow, без перенаправления, при использовании IOCControllerFactory - PullRequest
12 голосов
/ 25 августа 2011

Я нашел еще один вопрос, опубликованный здесь, который обеспечил решение первой части моего вопроса, а именно, как создать страницу 404 в ASP.NET MVC БЕЗ , перенаправляющую на другую страницу (поэтому изначально запрашивалсяURL-адрес остается в адресной строке).

ASP.NET MVC - Как создать страницу 404, аналогичную той, что в 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));

        }
    }

Сторона 404 вещейу меня работает нормально, если я не использую IOCControllerFactory, но как только я do использую фабрику, код ошибки в global.asax не используется, и вместо этого я получаю следующую ошибку:

IControllerFactory 'MyNamespace.IOCControllerFactory' не вернул контроллер для имени 'blah'.

Как мне обойти это, не прибегая к избавлению от моего контроллеразаводаи создание конструктора без параметров для каждого из моих контроллеров?

1 Ответ

12 голосов
/ 27 августа 2011

ASP.NET может сделать этот OOTB (начиная с 3.5).К элементу <CustomErrors> добавьте: redirectMode=ResponseRewrite

Обновление

Я отправил неправильный код.Это IIS 7, который обрабатывает это.

<system.webServer>
    <httpErrors errorMode="Custom" existingResponse="Replace">
         <remove statusCode="404" />
         <error statusCode="404" path="/home/notfound" responseMode="ExecuteURL" />
     </httpErrors>
<system.webServer>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...