2013-01-16 2 views
0

에는 확장명이 .aspx없는 경우 사로 잡았와 나는 Global.asax에있는 모든 404 오류를 기록하고 싶었다, 그래서 나는 거기에이 코드를 삽입하지 :웹 양식 : 404 오류 URL이 나는 웹 양식 프로젝트가

void Application_Error(object sender, EventArgs e) 
{ 
    var exception = Server.GetLastError(); 
    var httpException = exception as HttpException; 
    if (httpException == null) 
    { 
     Log.Error(string.Format("Unkown error:", Request.Url.AbsoluteUri), exception); 
    } 
    else if (httpException.GetHttpCode() == 404) 
    { 
     Log.Warn(string.Format("RequestError 404: {0}", HttpContext.Current.Request.Url.AbsoluteUri)); 
    } 
    else 
    { 
     Log.Error(string.Format("RequestError {0}: {2}\r\n{1}", httpException.GetHttpCode(), Server.UrlDecode(Request.Headers.ToString()), HttpContext.Current.Request.Url.AbsoluteUri), httpException); 
    } 
} 

이것은 확장명이 '.aspx'인 모든 요청에서 정상적으로 작동합니다. 그것이 없거나 또 다른 확장자가 없다면 Application_Error은 바이 패스된다.

이 내 web.config

<customErrors defaultRedirect="/500.aspx" mode="Off"> 
    <error statusCode="404" redirect="/404.aspx"/> 
    <error statusCode="500" redirect="/500.aspx"/> 
</customErrors> 

어떤 생각인가?

답변

6

Global.asax 파일에 정의 된 오류 처리기는 ASP.NET 런타임에서 요청을 처리하는 동안 발생하는 오류 만 catch합니다. 예를 들어, 사용자가 응용 프로그램에서 발생하지 않는 .aspx 파일을 요청하면 오류를 catch합니다. 그러나 사용자가 존재하지 않는 .htm 파일을 요청하면 오류를 catch하지 않습니다. 비 ASP.NET 오류의 경우 인터넷 정보 서비스 (IIS)에서 사용자 지정 처리기를 만들 수 있습니다. 서버 수준 오류에 대해서도 사용자 지정 처리기가 호출되지 않습니다.

http://msdn.microsoft.com/en-us/library/24395wz3(v=vs.100).aspx