문제

무엇이 좋은 오류 처리 연습에 대한 asp.net site?에 대한 참조를 제공합니다.감사합니다!

도움이 되었습니까?

해결책

모든 .NET 프로젝트와 마찬가지로 가장 좋은 방법은 특정 오류 유형이 주어진 페이지에서 발생할 수있는 경우에만 포착하는 것입니다.

예를 들어 입력 주어진 입력 사용자에 대한 형식 예외를 포착 할 수 있지만 (JavaScript 유효성 검사가 실패하고 TryParse를 사용하지 않으면) 항상 최상위 예외를 글로벌 오류 핸들러에 남겨 두십시오.

     try
        {
            //Code that could error here
        }
        catch (FormatException ex)
        {
            //Code to tell user of their error
            //all other errors will be handled 
            //by the global error handler
        }

오픈 소스를 사용할 수 있습니다 엘마 (오류 로깅 모듈 및 핸들러) ASP.NET의 경우 원하는 경우이 최상위 레벨/글로벌 오류를 수행합니다.

사용 엘마 웹 인터페이스를 구성하는 간단하지만 볼 수있는 오류 로그를 만들 수 있습니다. 다른 유형의 오류를 필터링하고 다른 오류 유형에 대해 자신의 사용자 지정 오류 페이지를 가질 수 있습니다.

다른 팁

특히 유용한 것으로 판단되는 한 가지 연습은 일반 오류 페이지를 작성한 다음 Web.Config의 CustomerRors 노드에서 해당 오류 페이지로 기본화 식별을 설정하는 것입니다.

그런 다음 global.asax 모든 처리되지 않은 예외를 기록한 다음 일부 클래스의 정적 속성에 (정적 Lasterror 속성을 갖는 ErrorUtil이라는 클래스가 있습니다). 그런 다음 오류 페이지 에서이 속성을보고 사용자에게 표시 할 내용을 결정할 수 있습니다.

자세한 내용은 여기를 참조하십시오. http://www.codeproject.com/kb/aspnet/jcglobalerrorhandling.aspx

글쎄, 그것은 꽤 넓은 개방되어 있습니다. 그것은 완전히 시원합니다. 다운로드 할 수있는 단어 .doc를 참조하겠습니다. 도트 그물 거미, 이것은 실제로 저의 소규모 회사의 코드 표준의 기초입니다. 표준에는 매우 유용한 오류 처리 팁이 포함되어 있습니다.

예외에 대한 그러한 예 중 하나 (이것이 문서에 독창적인지 또는 문서에 추가했는지 기억하지 못합니다) : "예외를 예외로하고 아무것도하지 마십시오". 예외를 숨기면 예외가 발생했는지 알 수 없습니다. 프로그래밍 방식으로 모든 오류 조건을 확인하여 항상 예외를 피하려고 노력해야합니다.

하지 말아야 할 일의 예 :

try
{
   ...
}
catch{}

당신이 그것에 대한 정당한 이유가 없다면 매우 장난 꾸러기.

응용 프로그램에서 생성 된 대부분의 오류를 포착하고 사용자에게 친숙한 메시지를 표시 할 수 있어야합니다. 그러나 물론 다른 사용자가 web.config 및 defaultredirect를 사용할 수있는 모든 오류를 포착 할 수는 없습니다. 오류를 기록하는 또 다른 편리한 도구는 Elmah입니다. Elmah는 응용 프로그램에서 생성 된 모든 오류를 기록하여 매우 읽기 쉬운 방식으로 표시합니다. 응용 프로그램에 Elmah를 막는 것은 Web.config 파일에 몇 줄의 코드를 추가하고 어셈블리를 첨부하는 것만 큼 간단합니다. 당신은 분명히 Elmah에게 시도해보아야합니다. 그것은 문자 그대로 몇 시간과 몇 시간의 고통을 절약 할 것입니다.

http://code.google.com/p/elmah/

  1. 방어 코드 내에서 각각의 페이지에 대한 예외를 기대할 수 있는 일이 일어날 수 있고 그들과 거래를 적절하게,그렇지 않을 방해하는 사용자의 모든 시간은 예외가 발생합니다.

  2. 로그는 모든 예외로,reference.

  3. 제공하는 일반적인 오류가 페이지 위해 처리되지 않은 모든 예외를 제공하는 참조용에 대한 지원(지원할 수 있는 자세한 내용을 확인 로그에서).을 표시하지 않는 실제 예외로,대부분의 사용자가 이해되지 않습니다 그것은 그러나 잠재적인 보안 위험으로 노출에 대한 정보 시스템(잠재적으로 비밀번호 등).

  4. 지 않는 모든 예외는 아무것도 하지 않고 그들과 함께는(위에서 응답).은 거의 결코 좋은 이유를 이렇게 때로 잡고 싶어 하는 특정 예외과하지 않는 어떤 의도적으로만 사용해야 한다.

사용자를 표준 오류 페이지로 리디렉션하는 것이 항상 좋은 생각은 아닙니다. 사용자가 양식을 작성하는 경우 작업중인 양식에서 방향을 바꾸고 싶지 않을 수 있습니다. 시도/캐치 블록 내부에 예외를 일으킬 수있는 모든 코드를 넣고 캐치 블록 내부에 오류가 발생했음을 알리는 경고 메시지를 뱉어 내고 양식 입력, 쿼리 문자열을 포함한 데이터베이스에서 예외를 기록합니다. 그러나 내부 사이트를 개발하고 있으므로 대부분의 사용자는 문제가있는 경우 저에게 전화합니다. 공개 사이트의 경우 Elmah와 같은 것을 사용하고 싶을 수도 있습니다.

public string BookLesson(Customer_Info oCustomerInfo, CustLessonBook_Info oCustLessonBookInfo)
    {
        string authenticationID = string.Empty;
        int customerID = 0;
        string message = string.Empty;
        DA_Customer oDACustomer = new DA_Customer();

        using (TransactionScope scope = new TransactionScope())
        {
            if (oDACustomer.ValidateCustomerLoginName(oCustomerInfo.CustId, oCustomerInfo.CustLoginName) == "Y")
            {
                // if a new student
                if (oCustomerInfo.CustId == 0)
                {
                    oCustomerInfo.CustPassword = General.GeneratePassword(6, 8);
                    oCustomerInfo.CustPassword = new DA_InternalUser().GetPassword(oCustomerInfo.CustPassword, false);
                    authenticationID = oDACustomer.Register(oCustomerInfo, ref customerID);
                    oCustLessonBookInfo.CustId = customerID;
                }
                else // if existing student
                {
                    oCustomerInfo.UpdatedByCustomer = "Y";
                    authenticationID = oDACustomer.CustomerUpdateProfile(oCustomerInfo);
                }
                message = authenticationID;
                // insert lesson booking details
                new DA_Lesson().BookLesson(oCustLessonBookInfo);
            }

            else
            {
                message = "login exists";
            }
            scope.Complete();
            return message;
        }

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