erro StructureMap quando o controlador inválido
-
06-07-2019 - |
Pergunta
Eu estou usando mapa estrutura como a loja MVC por Rob Conery faz e eu tenho uma AdminController e, assim, chegar a ele eu só digitar:
website/Admin/action
No entanto, se eu perca soletrar o nome do controlador eu recebo o erro abaixo:
Exceção detalhes: System.ArgumentNullException: Valor não pode ser nulo. Nome do parâmetro: chave
Há erro ocorre nesta linha:
Controller controller = ObjectFactory.GetInstance(controllerType) as Controller;
Alguém tem alguma idéia de como eu posso lidar com esse erro ou não permitir que isso aconteça em todos e talvez apenas Goto uma página 404 ??
Cheers antecipadamente
Solução
O problema é que, se não houver nenhum controlador com o nome do tipo esperado (ou seja, se o usuário digita " AMDIN " a classe base ControllerFactory irá procurar por " AMDIN Controlador "e não vai encontrá-lo, mas ainda irá chamar seu método anulado). Nesse caso, a variável controllerType será nulo. Então você pode apenas verificar se há nula antes da linha que você citou e depois (se ele é nulo) quer:
a) a execução de uma correcção ortografia, tais como a uma cfeduke sugere
ou B) simplesmente lançar um HttpException com o código de status 404 (que deve causa o erro 404 que você está procurando).
NOTA: Se você fizer uma correção ortográfica, você provavelmente deve fazer um Response.Redirect para o novo URL, ao invés de apenas silenciosamente carregar o controlador de direito, de que maneira as mudanças barra de endereços para refletir a correção ortográfica
Outras dicas
Você tem um par de opções diferentes (ou, se quiser, duas coisas que você pode combinar para uma solução). Para remover alguns dos potenciais problemas entre o bar cadeira e endereço você pode implementar uma solução de Soundex < a href = "http://www.csharphelp.com/archives2/archive394.html" rel = "nofollow noreferrer"> em C # usando o novo quadro de roteamento para potencialmente capturar alguns erros de ortografia e re-encaminhá-los para o URL esperado (e / ou adicionar rotas para o que você acredita erros ortográficos comuns ou pedidos será). Isso, no entanto, não é uma solução que vai resolver completamente o problema de forma que você precisa olhar para execução páginas de erro personalizadas para sua aplicação.