Подтвердить что ты не робот

Выбрасывание 404, как StackOverflow, без перенаправления при использовании IOCControllerFactory

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

qaru.site/info/426677/...

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, но как только я использую factory, код ошибки в global.asax не используется, и вместо этого я получаю следующее ошибка:

IControllerFactory "MyNamespace.IOCControllerFactory" не верните контроллер для имени "бла".

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

4b9b3361

Ответ 1

ASP.NET может выполнить этот OOTB (начиная с 3.5). В элементе <CustomErrors> добавьте: redirectMode=ResponseRewrite Забастовкa >

Обновление

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

<system.webServer>
    <httpErrors errorMode="Custom" existingResponse="Replace">
         <remove statusCode="404" />
         <error statusCode="404" path="/home/notfound" responseMode="ExecuteURL" />
     </httpErrors>
<system.webServer>