문제

이상한 오류가 발생했습니다 response.redirect() 그리고 프로젝트는 전혀 건축되지 않았습니다. Try-Catch 코드 블록을 둘러싼 블록 Response.Redirect() 정상적으로 작동했습니다 ..

이것이 알려진 문제인지 무언가인지 알고 싶다 ...

도움이 되었습니까?

해결책

내가 정확하게 기억한다면 Response.Redirect() 현재 요청을 중단하기 위해 예외를 던집니다 (ThreadAbortedException 또는 그런 것). 그래서 당신은 그 예외를 포착하고있을 것입니다.

편집하다:

이것 KB 기사 이 동작을 설명합니다 (또한 Request.End() 그리고 Server.Transfer() 행동 양식).

을 위한 Response.Redirect() 과부하가 있습니다.

Response.Redirect(String url, bool endResponse)

당신이 지나가는 경우 endResponse=false, 그러면 예외가 발생하지 않지만 런타임은 현재 요청을 계속 처리합니다).

만약에 endResponse=true (또는 다른 과부하가 사용되는 경우) 예외가 발생하고 현재 요청이 즉시 종료됩니다.

다른 팁

Martin이 지적한 것처럼 Respendirect는 ThreadabortException을 던졌습니다. 해결책은 예외를 다시 줄이는 것입니다.

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

Martin은 맞습니다. 응답을 사용할 때 스레드 상사성이 발생합니다. KB 기사는 여기에 있습니다

시도 블록 내부에서 선언 된 변수를 참조했을 수 있습니다.

예를 들어 아래 코드는 유효하지 않습니다.

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

B 선언을 트리 캐치 블록 외부로 옮겨야합니다.

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

나는 여기에 알려진 문제가 있다고 생각하지 않습니다.

리디렉션은 전류 제어를 다른 .aspx (예 : 예를 들어)로 남겨두기 때문에 시도/캐치 블록 내부에서 리디렉션 ()을 수행 할 수 없습니다.

편집 : 반면에, 나는이 모든 것이 뒤로 물러 났을 것입니다. 죄송합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top