ASP.NET MVC - фабрика пользовательских контроллеров для обслуживания 404 страниц - PullRequest
1 голос
/ 19 ноября 2010

Я написал этот вопрос несколько дней назад, и, хотя я получил несколько голосов, я не получил много действий.Вот почему я решил повторно посетить этот вопрос по-новому.

Я пытаюсь отправить пользователя в мое представление NotFound, которое находится в моем общем каталоге, всякий раз, когда они запрашивают контроллер илидействие, которое не существует.Вы увидите мой собственный ответ в предыдущем вопросе, который является рабочим обходным путем, однако он все еще требует, чтобы у меня были ErrorController и /Error/NotFound.vbhtml View.Я думаю, что это довольно нелепо, так как я использую только статический контент с этой точки зрения.

То, что я хотел бы сделать, это визуализировать представление из общего каталога без необходимости в контроллере.Вот тут-то и возникает моя идея фабрики пользовательских контроллеров ... Я просто не знаю, как это сделать.

Как мне построить фабрику пользовательских контроллеров, которая будет вести себя точно так же, какФабрика контроллеров по умолчанию, за исключением случаев, когда мне нужно показать представление NotFound (при этом, конечно, сохраняя исходный URI)?

Ответы [ 2 ]

1 голос
/ 19 ноября 2010

Я не понимаю, очко

Не является ли на самом деле фабрика пользовательских контроллеров больше работы , чем наличие дополнительного контроллера с одним действием, которое обрабатывает 404 с? *

И если у вас есть какой-то GeneralController, который обрабатывает функциональность всего приложения (например, настройки или подобное), это действие может быть частью его в любом случае.

Итак. Какой между фабрикой контроллеров и контроллером:

  • требует больше времени для разработки,
  • более подвержен ошибкам,
  • сложнее,
  • влияет на большую поверхность приложения в случае ошибок?

Agile разработчики должны быть ОЧЕНЬ ЛЕНИ, когда дело доходит до переобучения.

0 голосов
/ 19 ноября 2010

Это должно очень помочь ...

Как я могу правильно обработать 404 в ASP.NET MVC?

... и я бы порекомендовал вам пойтис таким подходом.

Я думаю, то, что вы пытаетесь сделать, скорее всего, идет вразрез с ASP.NET MVC или, по крайней мере, представляет что-то, что не будет очевидно для других, смотрящих наваш код.

Вы можете достичь чего-то похожего на то, что вы хотите, используя пользовательские ошибки.В web.config вы можете сделать что-то вроде этого ..

    <customErrors mode="On" >
        <error statusCode="404" redirect="~/Views/Shared/NotFound.aspx" />
    </customErrors>

... но поскольку эта страница aspx находится в папке Views, вы должны зайти в web.config, который находится в папке Views иостановите его от предотвращения прямого доступа к представлениям.

Если эта страница (NotFound.aspx) записана как представление MVC, у вас будут проблемы.Вы обнаружите, что некоторые вещи (например, this.Html) могут быть настроены неправильно.

Учитывая, что вы получаете доступ к этому файлу, как к классическому ASP.NET, вы можете захотеть написать его как классический ASP.NET и оставить его вне папки Views.

Наконец, вы можете использовать другой режим перенаправления ...

<customErrors mode="On" redirectMode="ResponseRewrite" >

... так, чтобы ваш 404-й URL соответствовал запрашиваемой странице.

...