Como resolver o erro “Request is not available in this context”

 

Você está trabalhando para migrar uma aplicação .NET do IIS6 para o IIS 7.x/8 e após fazer toda a configuração imediatamente no primeiro acesso já recebe a seguinte mensagem de erro:

Request is not available in this context

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Web.HttpException: Request is not available in this context

 

Logo abaixo você poderá encontrar detalhes adicionais (linha onde ocorreu o erro) além de uma pilha similar ao seguinte:

[HttpException (0x80004005): Request is not available in this context]    System.Web.HttpContext.get_Request() +3467061    ASP.global_asax.Application_Start(Object source, EventArgs e) in c:\inetpub\wwwroot\global.asax:5

[HttpException (0x80004005): Request is not available in this context]    System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(…

Como podemos observar, o erro foi gerado no módulo/método ASP.global_asax.Application_Start da aplicação. Este é um problema conhecido quando se faz a migração de aplicações ASP.NET do IIS6 para versões superiores, e está descrito no seguinte blog: https://mvolo.com/iis7-integrated-mode-request-is-not-available-in-this-context-exception-in-applicationstart

Para resolver o problema você precisará solicitar ao desenvolvedor que abra o arquivo GLOBAL.ASAX.CS (ou .VB) da aplicação e localize, dentro do método ApplicationStart() qualquer uso do objeto HttpContext.Current.Request. Em geral você encontrará algo como:

str = HttpContext.Current.Request.QueryString["key"];

Será necessário remover este código substituindo-o por algum outro mecanismo. A explicação para este erro é bem simples: no IIS7 o novo pipeline integrado irá executar o método Application_Start() antes que qualquer request chegue ao servidor, e portanto, o objeto Request não está disponível.

Um abraço e até a próxima,

PT