2013-06-02 3 views
0

두 가지 수준의 예외 처리가 발생하는 문제가 있습니다.CustomError IIS6 및 JQuery Ajax 예외 처리

jQuery를 사용하여 아약스 요청을하고 서버에서 사용자 정의 오류 예외를 던집니다. 이것은 기본적으로 상태 코드 500 오류입니다.

"사용자가 존재하지 않습니다"또는 "비밀번호가 일치하지 않습니다."와 같은 항목을 만들 때 사용하는 로그인 페이지에서 동적으로 선택됩니다. 사용자가 새 페이지로 리디렉션되지 않으면 상태가 상태 업데이트로 간단히 업데이트됩니다. 이것은 현재 작동합니다.

그러나 사용자가 성공적으로 로그인하면 페이지로 리디렉션됩니다. 이 새 페이지는 사용자가 페이지를 볼 수있는 역할을 할당했는지 여부를 확인합니다. web.config의 customerrors가 해제되었으므로 사용자는 노란색의 죽음 페이지로 이동합니다. 사용자에게 권한이나 액세스 권한이 없다는 것을 나타내는 것은 거부됩니다. 지금

<customErrors mode="RemoteOnly">  
    <error statusCode="403" redirect="~/accessdenied.aspx"/> 
</customErrors> 

이 사용자가 충분한 역할을하지 않아도 작동하는지하지만 원래로 다시 이동하여 :

이 처리하는 논리적 방법은 403 오류 페이지를 리디렉션 및 web.config에 있음을 구성하는 것입니다 jQuery가 500 개의 오류 요청을 처리하면 빈 메시지가 나타나고 오류 응답을 구문 분석하는 방법을 알지 못하는 javascript 오류가 발생합니다.

여기에 유래에 물어 비슷한 질문이지만, 그것은 도움이되지 않습니다 :

jQuery ajax in ASP.NET with customErrors mode="On"

내 질문의 차이와 그 질문은 로그인이 403 및 500 오류를 처리하는 것입니다. 내 로그인은 500 개의 오류를 처리하고 403 개의 오류를 처리하는 새 페이지로 이동합니다. web.config에 변경 사항을 추가하면 오류 처리에서 전체 사이트가 변경됩니다.

요약하면 .. customerrors mode = off이면 jQuery 예외는 작동하지만 사용자 정의 403 리디렉션은 작동하지 않습니다. customerrors 모드 = 켜기. jQuery 예외는 작동하지 않지만 403 리디렉션은 작동합니다.

누군가를 생각해 낼 수있는 방법이 있습니까? 내가 생각한 한 가지 방법은 로그인도 403을 처리하는 것이었고 로그인과 일치하는 역할이 들어오는 페이지의 역할과 일치하기를 바랍니다. 하지만 로그인 시스템이 리디렉션되는 페이지와 다른 시스템에 있기 때문에 필자는 그렇게 할 수 있습니다.

답변

0

음, 나는 customerror를 없애고 서버에서 사용자 정의 403 예외를 던지기 때문에 자바 스크립트는이를 가로 챌 것입니다. 그런 다음 액세스가 거부 된 페이지로 리디렉션합니다.

그래서이 내 C# 코드

내 JQuery와의 그런
if (!allowedRoles) 
{ 
    Logout(); 
    throw new HttpException(403, "User does not have permissions to view this page"); 
} 

입니다 :

function onLoginError(error, textStatus) { 
    var jsonErrorData = JSON.parse(error.responseText).Message; 
    $('#status').text(jsonErrorData); 
} 

내 Web.config의

<customErrors mode="Off"></customErrors>