2011-08-27 1 views
4

WebMethod으로 장식 된 aspx 페이지 메서드에서 오류를 반환하는 방법은 무엇입니까?webmethod에서 오류를 반환하는 방법은 무엇입니까?

샘플 코드

$.ajax({ 
    type: "POST", 
    url: "./Default.aspx/GetData", 
    data: "{}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: AjaxSucceeded, 
    error: AjaxFailed 
}); 

[WebMethod] 
public static string GetData() 
{ 

} 

방법의 WebMethod에서 하나 개의 반환 오류는 무엇입니까? 그래서 jquery 오류 부분을 사용하여 오류 세부 사항을 표시 할 수 있습니다.

답변

6

자세한 내용은 WebMethod 특정 방법이 있는지 모르겠지만 ASP.NET에서는 일반적으로 Response object의 상태 코드 만 설정합니다. 다음과 같은 것 :

Response.Clear(); 
Response.StatusCode = 500; // or whatever code is appropriate 
Response.End; 

소비하는 HTTP 클라이언트에 오류를 알리는 적절한 방법은 표준 오류 코드를 사용하는 것입니다. 응답을 끝내기 전에 보내려는 모든 메시지도 Response.Write() 수 있습니다. 이러한 형식은 훨씬 덜 표준화되어 있으므로 직접 만들 수 있습니다. 그러나 상태 코드가 응답을 정확하게 반영하는 한 JavaScript 또는 서비스를 사용하는 다른 클라이언트는 오류를 이해합니다.

+0

그래서'Response' 객체는 어디에서 왔습니까? 사용자의 웹 메소드가 문자열을 반환하고 있습니다. – OmegaMan

+0

@OmegaMan : 웹 메서드에서 HttpContext.Current'에 없습니까? 그렇지 않으면 ASP.NET의 다른 곳에서와 같이 있습니까? – David

+0

예, 해당 전역 변수에 들어 있습니다. 'WebMethod'는 직접적으로 그것과 상호 작용하지 않을 수 있으며 언급하는 것이 좋을 것입니다. – OmegaMan

1

오류는 결과 페이지의 http 상태 코드 (4xx - 사용자 요청 오류, 5xx - 내부 서버 오류)로 표시됩니다. 나는 asp.net을 모른다. 그러나 예외를 던져야 만한다.

+0

그러나 이는 예외적으로 클라이언트에게 페이지 세부 정보를 공개 할 예정입니까? – Riga

+0

오류 페이지 (또는 사용중인 프레임 워크)에 정의합니다. 대부분의 경우 매우 일반적인 오류 메시지 만 나타납니다. – ZeissS

3

그냥 PageMethod에서 예외를 던져서 AjaxFailed에 잡으십시오. 다음과 같은 내용이 있습니다.

function onAjaxFailed(error){ 
    alert(error); 
} 
+0

예외를 throw하면 예외 세부 정보를 오류 함수에 전달하여 OP가 요청한 작업을 수행합니다. 그래도 전개되면, customErrors 요소가 web.config에 설정되어 있지 않으면, 이것들은 일반적인 에러 ("내부 서버 에러")로 나타나서 클라이언트에게 유용한 메시지를 보내고 그것을 잡아낼 목적을 잃어 버리게됩니다. 에러 함수. –