Ошибка StructureMap при неверном контроллере - PullRequest
4 голосов
/ 03 ноября 2008

Я использую Структурную карту, как это делает витрина магазина MVC Роба Конери, и у меня есть AdminController, поэтому, чтобы добраться до него, я просто набираю:

website/Admin/action

однако, если я пропущу по буквам имя контроллера, я получаю ошибку ниже:

Сведения об исключении: System.ArgumentNullException: значение не может быть нулевым. Имя параметра: ключ

В этой строке возникает ошибка:

Controller controller = ObjectFactory.GetInstance(controllerType) as Controller;

У кого-нибудь есть идеи о том, как я могу справиться с этой ошибкой или вообще не допустить ее возникновения, и, возможно, просто перейдите на страницу 404 ??

Приветствия заранее

Ответы [ 2 ]

6 голосов
/ 03 ноября 2008

Проблема в том, что если нет контроллера с ожидаемым именем типа (т.е. если пользователь вводит " Amdin ", базовый класс ControllerFactory будет искать " Amdin Controller" и не найдет его, но все равно вызовет ваш переопределенный метод). В этом случае переменная controllerType будет нулевой. Таким образом, вы можете просто проверить его на null перед строкой, которую вы указали, а затем (если это null) либо:

A) Внести исправление орфографии, например, предложенное cfeduke

или B) просто сгенерируйте исключение HttpException с кодом состояния 404 (что должно вызвать ошибку 404, которую вы ищете).

ПРИМЕЧАНИЕ. Если вы делаете исправление орфографии, вам, вероятно, следует выполнить Response.Redirect на новый URL-адрес, а не просто загружать нужный контроллер в автоматическом режиме, чтобы адресная строка изменялась, отражая исправление орфографии

1 голос
/ 03 ноября 2008

У вас есть пара разных вариантов (или, если хотите, две вещи, которые вы можете объединить для решения). Чтобы устранить некоторые потенциальные проблемы между стулом и адресной строкой, вы можете реализовать решение SoundEx в C # , используя новую инфраструктуру маршрутизации, чтобы потенциально зафиксировать некоторые опечатки и перенаправить их на ожидаемый URL-адрес (и / или добавление маршрутов, которые, по вашему мнению, будут распространены с ошибками или запросами). Это, однако, не решение, которое полностью решит проблему, поэтому вам нужно посмотреть на реализацию пользовательских страниц ошибок для вашего приложения.

...