Como faço para fazer o [HandleError]
filtro no asp.net MVC Preview 5?
Eu defino os customErrors em meu arquivo Web.config
<customErrors mode="On" defaultRedirect="Error.aspx">
<error statusCode="403" redirect="NoAccess.htm"/>
<error statusCode="404" redirect="FileNotFound.htm"/>
</customErrors>
e coloque [HandleError] acima da minha classe de controlador assim:
[HandleError]
public class DSWebsiteController: Controller
{
[snip]
public ActionResult CrashTest()
{
throw new Exception("Oh Noes!");
}
}
Então eu deixo meus controladores herdarem desta classe e chamar CrashTest () neles. Visual Studio para no erro e depois de pressionar f5 para continuar, sou redirecionado para Error.aspx? Aspxerrorpath = / sxi.mvc / CrashTest (onde sxi é o nome do controlador usado. Claro que o caminho não pode ser encontrado e eu obtenho "Erro de servidor no aplicativo '/'." 404.
Este site foi portado da pré-visualização 3 para 5. Tudo funciona (não deu muito trabalho para portar), exceto o tratamento de erros. Quando crio um novo projeto completo, o tratamento de erros parece funcionar.
Ideias?
--Observação--
Já que esta pergunta tem mais de 3 mil visualizações agora, pensei que seria benéfico colocar o que estou usando atualmente (ASP.NET MVC 1.0). No projeto mvc contrib, há um atributo brilhante chamado "RescueAttribute". Você provavelmente também deve dar uma olhada;)
fonte
RescueAttribute
fonte: mvccontrib.codeplex.com/SourceControl/changeset/view/…Respostas:
Quando você fornece apenas o atributo HandleError para sua classe (ou para seu método de ação para esse assunto), então, quando uma exceção não tratada ocorrer, o MVC irá procurar por uma Visualização correspondente chamada "Erro" primeiro na pasta Visualização do Controlador. Se não conseguir encontrá-lo lá, ele continuará a procurar na pasta Shared View (que deve ter um arquivo Error.aspx por padrão)
Você também pode empilhar atributos adicionais com informações específicas sobre o tipo de exceção que está procurando. Nesse ponto, você pode direcionar o erro para uma visualização específica diferente da visualização padrão "Erro".
Para obter mais informações, dê uma olhada na postagem do blog de Scott Guthrie sobre isso.
fonte
global.asax
como este para mostrar uma mensagem aos usuários?Também deve ser observado que erros que não definem o código de erro http para 500
(por exemplo, UnauthorizedAccessException)
não será gerenciado pelo filtro HandleError.
fonte
Solução para código de erro http para 500 este é um atributo chamado [ERROR] coloque-o em uma ação
//EXEMPLO:
fonte
Atributos em MVC são muito úteis no tratamento de erros nos métodos get e post , e também rastreiam uma chamada ajax .
Crie um controlador de base em sua aplicação e herde-o em seu controlador principal (EmployeeController).
public class EmployeeController: BaseController
Adicione o código abaixo no controlador de base.
======================================================
Encontra o diretório: Root / App_Start / FilterConfig.cs
Adicione o código abaixo:
Rastrear erro AJAX:
Chame a função CheckAJAXError no carregamento da página de layout.
fonte
OnException
para lidar com exceções" , mas mostrando uma implementação muito ruim disso.Está faltando Error.aspx :) Na visualização 5, ele está localizado na pasta Views / Shared. Basta copiá-lo de um novo projeto do Preview 5.
fonte
}
fonte