Tratamento de erro do ASP.NET
por Erik Reitan
Baixar o Projeto de Exemplo de Brinquedos wingtip (C#) ou baixar e-book (PDF)
Esta série de tutoriais ensinará os conceitos básicos da criação de um aplicativo ASP.NET Web Forms usando ASP.NET 4.5 e Microsoft Visual Studio Express 2013 para Web. Um projeto Visual Studio 2013 com código-fonte C# está disponível para acompanhar esta série de tutoriais.
Neste tutorial, você modificará o aplicativo de exemplo Wingtip Toys para incluir tratamento de erros e registro em log de erros. O tratamento de erros permitirá que o aplicativo lide normalmente com erros e exiba mensagens de erro adequadamente. O log de erros permitirá que você localize e corrija erros ocorridos. Este tutorial se baseia no tutorial anterior "Roteamento de URL" e faz parte da série de tutoriais Wingtip Toys.
- Como adicionar o tratamento de erros global à configuração do aplicativo.
- Como adicionar tratamento de erros nos níveis de aplicativo, página e código.
- Como registrar erros para revisão posterior.
- Como exibir mensagens de erro que não comprometem a segurança.
- Como implementar o log de erros de Módulos e Manipuladores de Log de Erros (ELMAH).
ASP.NET aplicativos devem ser capazes de lidar com erros que ocorrem durante a execução de maneira consistente. ASP.NET usa o CLR (Common Language Runtime), que fornece uma maneira de notificar aplicativos de erros de maneira uniforme. Quando ocorre um erro, uma exceção é gerada. Uma exceção é qualquer erro, condição ou comportamento inesperado que um aplicativo encontra.
No .NET Framework, uma exceção é um objeto herdado da System.Exception
classe . Uma exceção é lançada de uma área do código em que ocorreu um problema. A exceção é passada a pilha de chamadas para um local em que o aplicativo fornece código para lidar com a exceção. Se o aplicativo não manipular a exceção, o navegador será forçado a exibir os detalhes do erro.
Como prática recomendada, manipule erros no nível do código em Try
//Catch
Finally
blocos dentro do código. Tente colocar esses blocos para que o usuário possa corrigir problemas no contexto em que eles ocorrem. Se os blocos de tratamento de erros estiverem muito longe de onde o erro ocorreu, será mais difícil fornecer aos usuários as informações necessárias para corrigir o problema.
A classe Exception é a classe base da qual as exceções herdam. A maioria dos objetos de exceção são instâncias de alguma classe derivada da classe Exception, como a SystemException
classe , a IndexOutOfRangeException
classe ou a ArgumentNullException
classe . A classe Exception tem propriedades, como a StackTrace
propriedade, a InnerException
propriedade e a Message
propriedade , que fornecem informações específicas sobre o erro ocorrido.
O runtime tem um conjunto base de exceções derivadas da SystemException
classe que o runtime gera quando uma exceção é encontrada. A maioria das classes que herdam da classe Exception, como a IndexOutOfRangeException
classe e a ArgumentNullException
classe , não implementa membros adicionais. Portanto, as informações mais importantes para uma exceção podem ser encontradas na hierarquia de exceções, no nome da exceção e nas informações contidas na exceção.
Em um aplicativo ASP.NET Web Forms, as exceções podem ser tratadas com base em uma hierarquia de manipulação específica. Uma exceção pode ser tratada nos seguintes níveis:
- Nível de aplicativo
- Nível da página
- Nível de código
Quando um aplicativo lida com exceções, informações adicionais sobre a exceção herdada da classe Exception geralmente podem ser recuperadas e exibidas para o usuário. Além do nível de aplicativo, página e código, você também pode lidar com exceções no nível do módulo HTTP e usando um manipulador personalizado do IIS.
Você pode lidar com erros padrão no nível do aplicativo modificando a configuração do aplicativo ou adicionando um Application_Error
manipulador no arquivo Global.asax do aplicativo.
Você pode lidar com erros padrão e erros HTTP adicionando uma customErrors
seção ao arquivo Web.config . A customErrors
seção permite que você especifique uma página padrão para a qual os usuários serão redirecionados quando ocorrer um erro. Ele também permite que você especifique páginas individuais para erros de código status específicos.
<configuration>
<system.web>
<customErrors mode="On" defaultRedirect="ErrorPage.aspx?handler=customErrors%20section%20-%20Web.config">
<error statusCode="404" redirect="ErrorPage.aspx?msg=404&handler=customErrors%20section%20-%20Web.config"/>
</customErrors>
</system.web>
</configuration>
Infelizmente, quando você usa a configuração para redirecionar o usuário para uma página diferente, não tem os detalhes do erro ocorrido.
No entanto, você pode capturar erros que ocorrem em qualquer lugar do aplicativo adicionando código ao Application_Error
manipulador no arquivo Global.asax .
void Application_Error(object sender, EventArgs e)
{
Exception exc = Server.GetLastError();
if (exc is HttpUnhandledException)
{
// Pass the error on to the error page.
Server.Transfer("ErrorPage.aspx?handler=Application_Error%20-%20Global.asax", true);
}
}
Um manipulador de nível de página retorna o usuário para a página em que o erro ocorreu, mas como as instâncias de controles não são mantidas, não haverá mais nada na página. Para fornecer os detalhes do erro ao usuário do aplicativo, você deve escrever especificamente os detalhes do erro na página.
Normalmente, você usaria um manipulador de erros no nível da página para registrar erros sem tratamento ou para levar o usuário a uma página que possa exibir informações úteis.
Este exemplo de código mostra um manipulador para o evento Error em uma página da Web ASP.NET. Esse manipulador captura todas as exceções que ainda não são tratadas dentro try
/catch
de blocos na página.
private void Page_Error(object sender, EventArgs e)
{
Exception exc = Server.GetLastError();
// Handle specific exception.
if (exc is HttpUnhandledException)
{
ErrorMsgTextBox.Text = "An error occurred on this page. Please verify your " +
"information to resolve the issue."
}
// Clear the error from the server.
Server.ClearError();
}
Depois de manipular um erro, você deve desmarcá-lo chamando o ClearError
método do objeto Server (HttpServerUtility
classe), caso contrário, verá um erro que ocorreu anteriormente.
A instrução try-catch consiste em um bloco try seguido por uma ou mais cláusulas catch, que especificam manipuladores para diferentes exceções. Quando uma exceção é gerada, o CLR (Common Language Runtime) procura a instrução catch que manipula essa exceção. Se o método em execução no momento não contiver um bloco catch, o CLR examinará o método que chamou o método atual e assim por diante, até a pilha de chamadas. Se nenhum bloco catch for encontrado, o CLR exibirá uma mensagem de exceção sem tratamento para o usuário e interromperá a execução do programa.
O exemplo de código a seguir mostra uma maneira comum de usar try
//catch
finally
para lidar com erros.
try
{
file.ReadBlock(buffer, index, buffer.Length);
}
catch (FileNotFoundException e)
{
Server.Transfer("NoFileErrorPage.aspx", true);
}
catch (System.IO.IOException e)
{
Server.Transfer("IOErrorPage.aspx", true);
}
finally
{
if (file != null)
{
file.Close();
}
}
No código acima, o bloco try contém o código que precisa ser protegido contra uma possível exceção. O bloco é executado até que uma exceção seja lançada ou o bloco seja concluído com êxito. Se ocorrer uma FileNotFoundException
exceção ou uma exceção IOException
, a execução será transferida para uma página diferente. Em seguida, o código contido no bloco finally é executado, independentemente de um erro ter ocorrido ou não.
Antes de adicionar o tratamento de erros ao aplicativo de exemplo Wingtip Toys, você adicionará suporte ao registro em log de erros adicionando uma ExceptionUtility
classe à pasta Lógica . Ao fazer isso, sempre que o aplicativo manipular um erro, os detalhes do erro serão adicionados ao arquivo de log de erros.
Clique com o botão direito do mouse na pasta Lógica e selecione Adicionar ->Novo Item.
A caixa de diálogo Adicionar novo item é exibida.Selecione o grupo de modelos Visual C# ->Code à esquerda. Em seguida, selecione Classena lista intermediária e nomeie-a como ExceptionUtility.cs.
Escolha Adicionar. O novo arquivo de classe é exibido.
Substitua o código existente pelo seguinte:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.IO; namespace WingtipToys.Logic { // Create our own utility for exceptions public sealed class ExceptionUtility { // All methods are static, so this can be private private ExceptionUtility() { } // Log an Exception public static void LogException(Exception exc, string source) { // Include logic for logging exceptions // Get the absolute path to the log file string logFile = "~/App_Data/ErrorLog.txt"; logFile = HttpContext.Current.Server.MapPath(logFile); // Open the log file for append and write the log StreamWriter sw = new StreamWriter(logFile, true); sw.WriteLine("********** {0} **********", DateTime.Now); if (exc.InnerException != null) { sw.Write("Inner Exception Type: "); sw.WriteLine(exc.InnerException.GetType().ToString()); sw.Write("Inner Exception: "); sw.WriteLine(exc.InnerException.Message); sw.Write("Inner Source: "); sw.WriteLine(exc.InnerException.Source); if (exc.InnerException.StackTrace != null) { sw.WriteLine("Inner Stack Trace: "); sw.WriteLine(exc.InnerException.StackTrace); } } sw.Write("Exception Type: "); sw.WriteLine(exc.GetType().ToString()); sw.WriteLine("Exception: " + exc.Message); sw.WriteLine("Source: " + source); sw.WriteLine("Stack Trace: "); if (exc.StackTrace != null) { sw.WriteLine(exc.StackTrace); sw.WriteLine(); } sw.Close(); } } }
Quando ocorre uma exceção, a exceção pode ser gravada em um arquivo de log de exceção chamando o LogException
método . Esse método usa dois parâmetros, o objeto de exceção e uma cadeia de caracteres que contém detalhes sobre a origem da exceção. O log de exceção é gravado no arquivo ErrorLog.txt na pasta App_Data .
No aplicativo de exemplo Wingtip Toys, uma página será usada para exibir erros. A página de erro foi projetada para mostrar uma mensagem de erro segura aos usuários do site. No entanto, se o usuário for um desenvolvedor que está fazendo uma solicitação HTTP que está sendo atendida localmente no computador onde o código reside, detalhes adicionais de erro serão exibidos na página de erro.
Clique com o botão direito do mouse no nome do projeto (Wingtip Toys) em Gerenciador de Soluções e selecione Adicionar ->Novo Item.
A caixa de diálogo Adicionar novo item é exibida.Selecione o grupo Modelos do Visual C# ->Web à esquerda. Na lista intermediária, selecione Formulário da Web com Página Mestra e nomeie-o ErrorPage.aspx.
Clique em Adicionar.
Selecione o arquivo Site.Master como a página master e escolha OK.
Substitua a marcação existente pelo seguinte:
<%@ Page Title="" Language="C#" AutoEventWireup="true" MasterPageFile="~/Site.Master" CodeBehind="ErrorPage.aspx.cs" Inherits="WingtipToys.ErrorPage" %> <asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server"> <h2>Error:</h2> <p></p> <asp:Label ID="FriendlyErrorMsg" runat="server" Text="Label" Font-Size="Large" style="color: red"></asp:Label> <asp:Panel ID="DetailedErrorPanel" runat="server" Visible="false"> <p> </p> <h4>Detailed Error:</h4> <p> <asp:Label ID="ErrorDetailedMsg" runat="server" Font-Size="Small" /><br /> </p> <h4>Error Handler:</h4> <p> <asp:Label ID="ErrorHandler" runat="server" Font-Size="Small" /><br /> </p> <h4>Detailed Error Message:</h4> <p> <asp:Label ID="InnerMessage" runat="server" Font-Size="Small" /><br /> </p> <p> <asp:Label ID="InnerTrace" runat="server" /> </p> </asp:Panel> </asp:Content>
Substitua o código existente do code-behind (ErrorPage.aspx.cs) para que ele apareça da seguinte maneira:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using WingtipToys.Logic; namespace WingtipToys { public partial class ErrorPage : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { // Create safe error messages. string generalErrorMsg = "A problem has occurred on this web site. Please try again. " + "If this error continues, please contact support."; string httpErrorMsg = "An HTTP error occurred. Page Not found. Please try again."; string unhandledErrorMsg = "The error was unhandled by application code."; // Display safe error message. FriendlyErrorMsg.Text = generalErrorMsg; // Determine where error was handled. string errorHandler = Request.QueryString["handler"]; if (errorHandler == null) { errorHandler = "Error Page"; } // Get the last error from the server. Exception ex = Server.GetLastError(); // Get the error number passed as a querystring value. string errorMsg = Request.QueryString["msg"]; if (errorMsg == "404") { ex = new HttpException(404, httpErrorMsg, ex); FriendlyErrorMsg.Text = ex.Message; } // If the exception no longer exists, create a generic exception. if (ex == null) { ex = new Exception(unhandledErrorMsg); } // Show error details to only you (developer). LOCAL ACCESS ONLY. if (Request.IsLocal) { // Detailed Error Message. ErrorDetailedMsg.Text = ex.Message; // Show where the error was handled. ErrorHandler.Text = errorHandler; // Show local access details. DetailedErrorPanel.Visible = true; if (ex.InnerException != null) { InnerMessage.Text = ex.GetType().ToString() + "<br/>" + ex.InnerException.Message; InnerTrace.Text = ex.InnerException.StackTrace; } else { InnerMessage.Text = ex.GetType().ToString(); if (ex.StackTrace != null) { InnerTrace.Text = ex.StackTrace.ToString().TrimStart(); } } } // Log the exception. ExceptionUtility.LogException(ex, errorHandler); // Clear the error from the server. Server.ClearError(); } } }
Quando a página de erro é exibida, o Page_Load
manipulador de eventos é executado. Page_Load
No manipulador, o local em que o erro foi tratado pela primeira vez é determinado. Em seguida, o último erro que ocorreu é determinado por chamar o GetLastError
método do objeto Server. Se a exceção não existir mais, uma exceção genérica será criada. Em seguida, se a solicitação HTTP tiver sido feita localmente, todos os detalhes do erro serão mostrados. Nesse caso, somente o computador local que executa o aplicativo Web verá esses detalhes de erro. Depois que as informações de erro forem exibidas, o erro será adicionado ao arquivo de log e o erro será limpo do servidor.
Ao adicionar uma customErrors
seção ao arquivo Web.config , você pode lidar rapidamente com erros simples que ocorrem em todo o aplicativo. Você também pode especificar como lidar com erros com base em seu valor de código status, como 404 – Arquivo não encontrado.
Atualize a configuração adicionando uma customErrors
seção ao arquivo Web.config .
Em Gerenciador de Soluções, localize e abra o arquivo Web.config na raiz do aplicativo de exemplo Wingtip Toys.
Adicione a
customErrors
seção ao arquivo Web.config dentro do nó da<system.web>
seguinte maneira:<configuration> <system.web> <customErrors mode="On" defaultRedirect="ErrorPage.aspx?handler=customErrors%20section%20-%20Web.config"> <error statusCode="404" redirect="ErrorPage.aspx?msg=404&handler=customErrors%20section%20-%20Web.config"/> </customErrors> </system.web> </configuration>
Salvar o arquivo Web.config.
A customErrors
seção especifica o modo , que é definido como "Ativado". Ele também especifica o defaultRedirect
, que informa ao aplicativo para qual página navegar quando ocorrer um erro. Além disso, você adicionou um elemento de erro específico que especifica como lidar com um erro 404 quando uma página não é encontrada. Posteriormente neste tutorial, você adicionará tratamento de erro adicional que capturará os detalhes de um erro no nível do aplicativo.
Agora você pode executar o aplicativo para ver as rotas atualizadas.
Pressione F5 para executar o aplicativo de exemplo Wingtip Toys.
O navegador é aberto e mostra a página Default.aspx .Insira a SEGUINTE URL no navegador (certifique-se de usar o número da porta):
https://localhost:44300/NoPage.aspx
Examine o ErrorPage.aspx exibido no navegador.
Quando você solicitar a página NoPage.aspx , que não existe, a página de erro mostrará a mensagem de erro simples e as informações de erro detalhadas se houver detalhes adicionais disponíveis. No entanto, se o usuário solicitasse uma página inexistente de um local remoto, a página de erro mostraria apenas a mensagem de erro em vermelho.
Para verificar como seu aplicativo funcionará quando ocorrer um erro, você pode criar deliberadamente condições de erro em ASP.NET. No aplicativo de exemplo Wingtip Toys, você lançará uma exceção de teste quando a página padrão for carregada para ver o que acontece.
Abra o code-behind da página Default.aspx no Visual Studio.
A página code-behind Default.aspx.cs será exibida.Page_Load
No manipulador, adicione código para que o manipulador apareça da seguinte maneira:protected void Page_Load(object sender, EventArgs e) { throw new InvalidOperationException("An InvalidOperationException " + "occurred in the Page_Load handler on the Default.aspx page."); }
É possível criar vários tipos diferentes de exceções. No código acima, você está criando um InvalidOperationException
quando a página Default.aspx é carregada.
Você pode executar o aplicativo para ver como o aplicativo lida com a exceção.
Pressione CTRL+F5 para executar o aplicativo de exemplo Wingtip Toys.
O aplicativo lança InvalidOperationException.Nota
Você deve pressionar CTRL+F5 para exibir a página sem invadir o código para exibir a origem do erro no Visual Studio.
Examine o ErrorPage.aspx exibido no navegador.
Como você pode ver nos detalhes do erro, a exceção foi interceptada pela customError
seção no arquivo Web.config .
Em vez de interceptar a exceção usando a customErrors
seção no arquivo Web.config , em que você obtém poucas informações sobre a exceção, pode interceptar o erro no nível do aplicativo e recuperar detalhes do erro.
Em Gerenciador de Soluções, localize e abra o arquivo Global.asax.cs.
Adicione um manipulador de Application_Error para que ele apareça da seguinte maneira:
void Application_Error(object sender, EventArgs e) { // Code that runs when an unhandled error occurs. // Get last error from the server Exception exc = Server.GetLastError(); if (exc is HttpUnhandledException) { if (exc.InnerException != null) { exc = new Exception(exc.InnerException.Message); Server.Transfer("ErrorPage.aspx?handler=Application_Error%20-%20Global.asax", true); } } }
Quando ocorre um erro no aplicativo, o Application_Error
manipulador é chamado. Nesse manipulador, a última exceção é recuperada e revisada. Se a exceção foi sem tratamento e a exceção contém detalhes de exceção interna (ou seja, InnerException
não é nula), o aplicativo transfere a execução para a página de erro em que os detalhes da exceção são exibidos.
Você pode executar o aplicativo para ver os detalhes de erro adicionais fornecidos manipulando a exceção no nível do aplicativo.
Pressione CTRL+F5 para executar o aplicativo de exemplo Wingtip Toys.
O aplicativo lança oInvalidOperationException
.Examine o ErrorPage.aspx exibido no navegador.
Você pode adicionar o tratamento de erros no nível da página a uma página usando a @Page
adição de um ErrorPage
atributo à diretiva da página ou adicionando um Page_Error
manipulador de eventos ao code-behind de uma página. Nesta seção, você adicionará um Page_Error
manipulador de eventos que transferirá a execução para a página ErrorPage.aspx .
Em Gerenciador de Soluções, localize e abra o arquivo Default.aspx.cs.
Adicione um
Page_Error
manipulador para que o code-behind apareça da seguinte maneira:using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace WingtipToys { public partial class _Default : Page { protected void Page_Load(object sender, EventArgs e) { throw new InvalidOperationException("An InvalidOperationException " + "occurred in the Page_Load handler on the Default.aspx page."); } private void Page_Error(object sender, EventArgs e) { // Get last error from the server. Exception exc = Server.GetLastError(); // Handle specific exception. if (exc is InvalidOperationException) { // Pass the error on to the error page. Server.Transfer("ErrorPage.aspx?handler=Page_Error%20-%20Default.aspx", true); } } } }
Quando ocorre um erro na página, o Page_Error
manipulador de eventos é chamado. Nesse manipulador, a última exceção é recuperada e revisada. Se ocorrer um InvalidOperationException
, o Page_Error
manipulador de eventos transferirá a execução para a página de erro em que os detalhes da exceção são exibidos.
Agora você pode executar o aplicativo para ver as rotas atualizadas.
Pressione CTRL+F5 para executar o aplicativo de exemplo Wingtip Toys.
O aplicativo lança oInvalidOperationException
.Examine o ErrorPage.aspx exibido no navegador.
Feche a janela do navegador.
Para permitir que o aplicativo de exemplo Wingtip Toys funcione sem gerar a exceção que você adicionou anteriormente neste tutorial, remova a exceção.
Abra o code-behind da página Default.aspx .
Page_Load
No manipulador, remova o código que gera a exceção para que o manipulador apareça da seguinte maneira:protected void Page_Load(object sender, EventArgs e) { }
Conforme mencionado anteriormente neste tutorial, você pode adicionar instruções try/catch para tentar executar uma seção de código e lidar com o primeiro erro que ocorre. Neste exemplo, você só gravará os detalhes do erro no arquivo de log de erros para que o erro possa ser revisado posteriormente.
Em Gerenciador de Soluções, na pasta Lógica, localize e abra o arquivo PayPalFunctions.cs.
Atualize o
HttpCall
método para que o código apareça da seguinte maneira:public string HttpCall(string NvpRequest) { string url = pEndPointURL; string strPost = NvpRequest + "&" + buildCredentialsNVPString(); strPost = strPost + "&BUTTONSOURCE=" + HttpUtility.UrlEncode(BNCode); HttpWebRequest objRequest = (HttpWebRequest)WebRequest.Create(url); objRequest.Timeout = Timeout; objRequest.Method = "POST"; objRequest.ContentLength = strPost.Length; try { using (StreamWriter myWriter = new StreamWriter(objRequest.GetRequestStream())) { myWriter.Write(strPost); } } catch (Exception e) { // Log the exception. WingtipToys.Logic.ExceptionUtility.LogException(e, "HttpCall in PayPalFunction.cs"); } //Retrieve the Response returned from the NVP API call to PayPal. HttpWebResponse objResponse = (HttpWebResponse)objRequest.GetResponse(); string result; using (StreamReader sr = new StreamReader(objResponse.GetResponseStream())) { result = sr.ReadToEnd(); } return result; }
O código acima chama o LogException
método contido na ExceptionUtility
classe . Você adicionou o arquivo de classe ExceptionUtility.cs à pasta Lógica anteriormente neste tutorial. O método LogException
utiliza dois parâmetros. O primeiro parâmetro é o objeto de exceção. O segundo parâmetro é uma cadeia de caracteres usada para reconhecer a origem do erro.
Conforme mencionado anteriormente, você pode usar o log de erros para determinar quais erros em seu aplicativo devem ser corrigidos primeiro. É claro que somente os erros que foram interceptados e gravados no log de erros serão registrados.
Em Gerenciador de Soluções, localize e abra o arquivo ErrorLog.txt na pasta App_Data.
Talvez seja necessário selecionar a opção "Mostrar Todos os Arquivos" ou a opção "Atualizar" na parte superior do Gerenciador de Soluções para ver o arquivo ErrorLog.txt.Examine o log de erros exibido no Visual Studio:
É importante observar que, quando seu aplicativo exibe mensagens de erro, ele não deve fornecer informações que um usuário mal-intencionado pode achar úteis para atacar seu aplicativo. Por exemplo, se o aplicativo tentar gravar sem sucesso em um banco de dados, ele não deverá exibir uma mensagem de erro que inclua o nome de usuário que está usando. Por esse motivo, uma mensagem de erro genérica em vermelho é exibida para o usuário. Todos os detalhes de erro adicionais são exibidos apenas para o desenvolvedor no computador local.
ELMAH (Módulos e Manipuladores de Log de Erros) é um recurso de registro em log de erros que você conecta ao aplicativo ASP.NET como um pacote NuGet. O ELMAH fornece os seguintes recursos:
- Registro em log de exceções sem tratamento.
- Uma página da Web para exibir todo o log de exceções sem tratamento recodificadas.
- Uma página da Web para exibir os detalhes completos de cada exceção registrada.
- Uma notificação por email de cada erro no momento em que ele ocorre.
- Um RSS feed dos últimos 15 erros do log.
Antes de trabalhar com o ELMAH, você deve instalá-lo. Isso é fácil usando o instalador de pacote NuGet . Conforme mencionado anteriormente nesta série de tutoriais, o NuGet é uma extensão do Visual Studio que facilita a instalação e a atualização código aberto bibliotecas e ferramentas no Visual Studio.
No Visual Studio, no menu Ferramentas, selecione Gerenciador de Pacotes> NuGetGerenciar Pacotes NuGet para solução.
A caixa de diálogo Gerenciar Pacotes NuGet é exibida no Visual Studio.
Na caixa de diálogo Gerenciar Pacotes NuGet , expanda Online à esquerda e selecione nuget.org. Em seguida, localize e instale o pacote ELMAH na lista de pacotes disponíveis online.
Você precisará ter uma conexão com a Internet para baixar o pacote.
Na caixa de diálogo Selecionar Projetos , verifique se a seleção WingtipToys está selecionada e clique em OK.
Clique em Fechar na caixa de diálogo Gerenciar Pacotes NuGet , se necessário.
Se o Visual Studio solicitar que você recarregue arquivos abertos, selecione "Sim para Todos".
O pacote ELMAH adiciona entradas para si mesmo no arquivo Web.config na raiz do projeto. Se o Visual Studio perguntar se você deseja recarregar o arquivo deWeb.config modificado, clique em Sim.
O ELMAH agora está pronto para armazenar quaisquer erros sem tratamento que ocorram.
Exibir o log ELMAH é fácil, mas primeiro você criará uma exceção sem tratamento que será registrada no log ELMAH.
Pressione CTRL+F5 para executar o aplicativo de exemplo Wingtip Toys.
Para gravar uma exceção sem tratamento no log ELMAH, navegue no navegador até a seguinte URL (usando o número da porta):
https://localhost:44300/NoPage.aspx
A página de erro será exibida.Para exibir o log ELMAH, navegue no navegador até a seguinte URL (usando o número da porta):
https://localhost:44300/elmah.axd
Neste tutorial, você aprendeu a lidar com erros no nível do aplicativo, no nível da página e no nível do código. Você também aprendeu a registrar em log erros manipulados e sem tratamento para revisão posterior. Você adicionou o utilitário ELMAH para fornecer registro em log de exceção e notificação ao seu aplicativo usando o NuGet. Além disso, você aprendeu sobre a importância das mensagens de erro seguras.
Obrigado por acompanhar. Espero que esse conjunto de tutoriais tenha ajudado você a se familiarizar mais com ASP.NET Web Forms. Se você precisar de mais informações sobre Web Forms recursos disponíveis no ASP.NET 4.5 e Visual Studio 2013, consulte ASP.NET and Web Tools para Visual Studio 2013 notas sobre a versão. Além disso, confira o tutorial mencionado na seção Próximas Etapas e experimente a avaliação gratuita do Azure.
Saiba mais sobre como implantar seu aplicativo Web no Microsoft Azure, confira Implantar um aplicativo de ASP.NET Web Forms seguro com associação, OAuth e Banco de Dados SQL em um site do Azure.
Microsoft Azure – Avaliação gratuita
Publicar seu site no Microsoft Azure economizará tempo, manutenção e despesas. É um processo rápido para implantar seu aplicativo Web no Azure. Quando você precisa manter e monitorar seu aplicativo Web, o Azure oferece uma variedade de ferramentas e serviços. Gerenciar dados, tráfego, identidade, backups, mensagens, mídia e desempenho no Azure. E tudo isso é fornecido em uma abordagem muito econômica.
Detalhes do erro de registro em log com ASP.NET monitoramento de integridade
ELMAH
Gostaria de agradecer às seguintes pessoas que fizeram contribuições significativas ao conteúdo desta série de tutoriais:
- Alberto Poblacion, MVP & MCT, Espanha
- Alex Thissen, Países Baixos (twitter: @alexthissen)
- Andre Tournier, EUA
- Apurva Joshi, Microsoft
- Bojan Vrhovnik, Eslovênia
- Bruno Sonnino, Brasil (twitter: @bsonnino)
- Carlos dos Santos
- Dave Campbell, EUA (twitter: @windowsdevnews)
- Jon Galloway, Microsoft (twitter: @jongalloway)
- Michael Sharps, EUA (twitter: @mrsharps)
- Mike Pope
- Mitchel Sellers, EUA (twitter: @MitchelSellers)
- Paul Cociuba
- Paulo Morgado
- Pranav Rastogi, Microsoft
- Tim Ammann
- Tom Dykstra
- Graham Mendick (@grahammendick)
Exemplo de código relacionado ao Visual Studio 2012 no MSDN: Navigation Wingtip Toys - James Chaney (jchaney@agvance.net)
Exemplo de código relacionado ao Visual Studio 2012 no MSDN: ASP.NET série de tutoriais de Web Forms 4.5 no Visual Basic - Andrielle Azevedo - Colaboradora do Público Técnico da Microsoft (twitter: @driazevedo)
Tradução do Visual Studio 2012: Iniciando com ASP.NET Web Forms 4.5 – Parte 1 – Introdução e Visão Geral