Pergunta

Eu tenho algum erro estranho com response.redirect() e o projeto não estava construindo em todos .. quando eu removi o try-catch bloco que foi em torno do bloco de código onde Response.Redirect() estava nele trabalhou normalmente ..

Apenas quero saber se este é um problema conhecido ou algo assim ...

Foi útil?

Solução

Se bem me lembro, Response.Redirect() lança uma exceção para abortar a requisição atual (ThreadAbortedException ou algo parecido). Assim que você pode estar pegando essa exceção.

Editar:

Este artigo KB descreve este comportamento (também para os métodos Request.End() e Server.Transfer()).

Para Response.Redirect() existe uma sobrecarga:

Response.Redirect(String url, bool endResponse)

Se você passar endResponse=false, em seguida, a exceção não é lançada (mas o tempo de execução irá continuar a processar a solicitação atual).

Se endResponse=true (ou se o outro sobrecarga é usado), a exceção é lançada e a solicitação atual será imediatamente encerrado.

Outras dicas

Como Martin aponta, Response.Redirect lança um ThreadAbortException. A solução é re-lançar a exceção:

try  
{
   Response.Redirect(...);
}
catch(ThreadAbortException)
{
   throw; // EDIT: apparently this is not required :-)
}
catch(Exception e)
{
  // Catch other exceptions
}

Martin é correto, um ThreadAbortException é jogado quando você usa um Response.Redirect, consulte o artigo kb aqui

Você pode ter referenciado uma variável que é declarada dentro do bloco try.

Por exemplo, o código abaixo é inválido:

try
{
  var b = bool.Parse("Yeah!");
}
catch (Exception ex)
{
  if (b)
  {
    Response.Redirect("somewhere else");
  }
}

Você deve sair a declaração b para fora do bloco try-catch.

var b = false;
try
{
  b = bool.Parse("Yeah!");
}
catch (Exception ex)
{
  if (b)
  {
    Response.Redirect("somewhere else");
  }
}

Eu não acho que haja qualquer problema conhecido aqui.

Você simplesmente não pode fazer um redirecionamento () dentro de um bloco try / catch porque Redirect deixa o controle atual para outro aspx (por exemplo), o que deixa a captura no ar (não pode voltar a ele) .

EDIT: Por outro lado, eu poderia ter tido tudo isso para trás figuradas. Desculpe.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top