Eu estou trabalhando em um projeto ASP.NET e estou criando um handler, que obviamente implementa a Interface IHttpHandler, para que processe e gere um arquivo binário para forçar o download do mesmo.
Depois que configurei o arquivo Web.Config, a requisição para arquivos com extensão “*.abc” serão agora interceptados por este handler. Mas existe um grande problema aqui, porque eu estou utilizando o método Server.Transfer, então eu não posso enviar para um dos overloads deste método uma instancia deste handler que criei ou chamar diretamente o “caminho virtual”, como “Pagina.abc”. Voce pode confirmar essa informação decompilando o método Transfer utilizando o Reflector:
[ — Suprimido — ]
else if (!(handler is Page))
{
error = new HttpException(0x194, string.Empty);
}
[ — Suprimido — ]
if (error != null)
{
[ — Suprimido — ]
throw new HttpException(SR.GetString(“Error_executing_child_request_for_handler”,
new object[] { handler.GetType().ToString() }), error);
}
Independentemente do overload do método Transfer que voce use, a mensagem de erro é a mesma: “Error executing child request for [handler | Pagina.abc].”. A razão porque eu não utilizo o método Response.Redirect é que eu preciso enviar parametros através do coleção de Context.Items por questões de segurança.
A solução temporária para isso é herdar a classe Page ao invés de implementar a interface IHttpHandler no meu handler, mas eu acredito que isso não seja lá muito elegante.