2011-02-11 3 views
18

페이지 (코드 숨김) 내에서 404 오류를 던질 수 있는지 궁금합니다. 또는 408 (시간 초과) 또는 401 (인증 필요)과 같은 다른 유형의 오류 페이지를 던질 수 있습니까?ASP.Net 페이지 내에 404 오류가 발생할 수 있습니까?

참고 : 페이지의 상태 코드가 404가 아니고 ASP.Net (또는 내 CustomErrors) 404 오류 페이지를 사용하고 싶습니다. 뒤에 코드에서이 같은

뭔가 :

if(id>10){ //if id is greater than 10, then it doesn't exist here 
    throw 404Error(); 
} 

답변

29

당신은 HttpException가 발생하고 해당 상태 코드를 설정할 수 있습니다 :

throw new HttpException(404, "Not found"); 

또한 다른 상태 코드와 함께 작동합니다. 401에 대한 주석 : ASP.NET MVC가이 코드를 감지하면 자동으로 로그인 페이지로 리디렉션되고 401 상태 코드에 대한 사용자 정의 오류 페이지가 구현되는 실제 PITA 일 수 있습니다.

+0

흠 사용자 지정 오류 페이지를 사용할 때 훨씬 더 던질 필요가 없습니다. CustomErrors가 꺼져있을 때이 예외가 발생하면 스택 추적이있는 표준 ASP.Net 예외 페이지가 표시됩니까? – Earlz

+2

@Earlz,'customErrors = "Off"이면 YSOD를 얻습니다. –

+0

개발 환경에서 언제인지 궁금합니다. 그것은 작동하는 것 같다! – Earlz

17

훨씬 더 좋은 방법은 다음과 같습니다

'Throws a 404 Not found: 
Response.Clear() 
Response.StatusCode = 404 
Response.End() 

예외 및 위 작품의 Web.config

+1

또한 System.Net.HttpStatusCode에서 열거 형을 사용할 수도 있습니다. –

+2

'Response.End()'는 Classic ASP의 캐리 오버이므로 피해야합니다. 그것은 과부하 환경에서 좋지 않은'ThreadAbortException'을 발생시킵니다. 대신에'HttpContext.Current.ApplicationInstance.CompleteRequest'를 호출하고, 필요하다면 에러 메시지를 작성한 후에'Response.SuppressContent = true'를 설정하십시오. – Dai

+0

이 답변은 Clear() 및 End() 호출을 포함하여 컨텍스트에 코드 조각을 넣기 때문에 특히 유용합니다. –

관련 문제