2010-07-27 2 views
2

개요 :Asp.net MVC2에서 Ajax 호출을 통해 UnauthorizedRequest을 처리하는 방법

나는 사용자 인증을 수행하고있는 내 프레임 워크에 AuthorizeAttribute 분류 하위 있습니다.

정상적인 asp.net MVC 뷰 렌더링에서 jQuery를 통한 Ajax 렌더링으로 전환하는 중입니다. 따라서 응용 프로그램의 모든 링크는 데이터를 얻기 위해 ajax 호출을 수행합니다.

이 문제를 해결하기 위해 대부분의 내 페이지를 부분 뷰로 변환하여 각 아약스 요청은 페이지에서 업데이트해야하는 부분 만 가져옵니다.

요청이 승인되지 않은 정상적인보기 렌더링 중에는 web.config에 설명 된 로그온 페이지로 리디렉션되고있었습니다. Ajax로 변환 한 후에는 ajax 요청의 로그온 페이지에 대한 마크 업을 원하지 않지만 Ajax 호출 내에서 그에 따라 대응할 수 있도록 구조화 된 응답을 원한다면 상황이 약간 다릅니다.

이렇게하려면 하위 클래스의 AuthorizeAttribute 클래스에서 HandleUnauthorizedRequest 메서드를 재정의하고 filterContext.Result를 json 결과로 설정해야한다고 생각합니다. 하지만 이렇게하면 인증되지 않은 요청과 성공한 요청을 구분할 수 있습니다. 왜냐하면 아약스 호출 관점에서 두 가지 모두 성공적인 응답이기 때문입니다. 따라서 성공 처리기에서 처리됩니다.

이 문제를 해결하는 올바른 방법은 무엇입니까?

답변

6

방금 ​​알아 냈습니다. HandleUnauthorized 내 AuthorizeAttribute 하위 클래스에서 재정의하는 요청 방법에서 정상 요청과 아약스 요청 사이를 필터링 할 수 있습니다. 그런 식으로 아약스 요청에 대한 json 결과 또는 뭔가 다른 만들 수 있고 정상적인 요청을 여전히 로그인 페이지를 표시합니다. 다음과 같이 코드는 다음과 같습니다 해결로 누군가가 그 일을 더 나은 방법을 제안 할 수 있다면, 난 아직도 제안에 열려입니다 있도록

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
    { 
     if (filterContext.RequestContext.HttpContext.Request.IsAjaxRequest()) 
     { 
      JsonResult UnauthorizedResult = new JsonResult(); 
      UnauthorizedResult.Data = "{ request : 'unauthorized' }"; 
      UnauthorizedResult.JsonRequestBehavior = JsonRequestBehavior.AllowGet; 
      filterContext.Result = UnauthorizedResult; 
     } 
     else 
     { 
      base.HandleUnauthorizedRequest(filterContext); 
     } 
    } 

아직도 내가 내 질문을 표시하지 않습니다.

+0

좋아요, 세션 중에 잘 작동합니다. 세션이 만료되면 바로 상태가 성공한 ajax 요청에 대한 응답으로 다시 로그인 페이지가 전송됩니다. 따라서 세션이 만료되었음을 감지하기 위해 무언가를해야합니다. 어떤 제안이 있습니까? – Nosh

관련 문제