ASHX 처리기를 사용하고 있는데, 처리기에서 Session! = null인지 확인해야합니다.System.NullReferenceException! = null인지 확인하는 경우
System.NullReferenceException : 개체의 인스턴스로 설정되지 않았습니다 개체 참조
if (context.Session["Username"] != null)
와 나는이 줄을 가리키는이 오류가 발생합니다.
무엇이 문제입니까?
ASHX 처리기를 사용하고 있는데, 처리기에서 Session! = null인지 확인해야합니다.System.NullReferenceException! = null인지 확인하는 경우
System.NullReferenceException : 개체의 인스턴스로 설정되지 않았습니다 개체 참조
if (context.Session["Username"] != null)
와 나는이 줄을 가리키는이 오류가 발생합니다.
무엇이 문제입니까?
if (context.Session["Username"] != null)
처리기가 IRequiresSessionState
을 구현합니까? 그렇지 않으면 세션을 사용하지 못할 수 있습니다. MSDN에서
:
대상 HTTP 처리기 읽고 세션 상태 값에 대한 쓰기 액세스 권한을 필요로 지정합니다. 이것은 마커 인터페이스이며 아무런 방법이 없습니다.
그래, 먼저 컨텍스트가 null이 아닌지 확인합니다.
이렇게 사용하십시오. 캡슐화 된 개체 중 하나가 이미 null 일 수 있습니다.
위와 같은 null 체크를 쌓아두면 문제의 정확한 원인을 찾아 낼 수 있습니다. 자질구레 한 것 같지만 돈을 지불합니다. –
이 방법은 Session을 사용할 수없는 경우 대체 코드 경로가있는 경우 합리적입니다. 다른 한편으로는 Session이있을 것으로 기대하는 것이 어려운 가정이고 코드가이 가정에 의존하면 ** 빠르다. ** 접근 방식은 예외를 던지게하는 것일 것입니다. 그렇지 않으면 null 체크로이 문제를 가릴 가능성이 있습니다. – BrokenGlass
물론 물론 중첩 된 if 문은 중첩 된 else로 보완되어야합니다. null 개체 (처음에는 null이 아니어야 함)를 처리하고 적절한 메시지로 적절한 예외를 throw하는 것이 적합합니다. –
.ashx 파일과 비슷한 문제가있었습니다. 해결 방법은 처리기가 IReadOnlySessionState (읽기 전용 액세스 용) 또는 IRequiresSessionState (읽기/쓰기 액세스 용)를 구현해야한다는 것입니다. 예 :
public class myModule: IHttpHandler, IRequiresSessionState { ... }
이 인터페이스는 추가 코드가 필요하지 않지만 프레임 워크의 마커 역할을합니다.
희망이 도움이됩니다.
조나단
네는 - 원래 평가 바보 나, 내가 내가이 링크를 발견 ...'IReadOnlySessionState'를 추가해야 잘못 – BrokenGlass
오이었다 http://www.hanselman.com/blog/ GettingSessionStateInHttpHandlersASHXFiles.aspx – Danpe