2013-01-10 11 views
7

W programie WebMethod ASP.NET ASMX, który odpowiada na JSON, czy mogę obrzucić wyjątek & ustawić kod odpowiedzi HTTP? Pomyślałem, że gdybym rzucił wyjątek HttpException, kod statusu zostałby ustawiony odpowiednio, ale nie może uzyskać usługi, by odpowiedzieć cokolwiek poza błędem 500.Czy mogę ustawić kod odpowiedzi HTTP i zgasić wyjątek w usłudze JSON ASMX?

Próbowałem następujące:

[WebMethod] 
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] 
public void TestWebMethod() { 
    throw new HttpException((int)HttpStatusCode.BadRequest, "Error Message"); 
} 

również:

[WebMethod] 
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] 
public void TestWebMethod() { 
    try { 
     throw new HttpException((int)HttpStatusCode.BadRequest, "Error Message"); 
    } 
    catch (HttpException ex) { 
     Context.Response.StatusCode = ex.GetHttpCode(); 
     throw ex; 
    } 
} 

Są zarówno odpowiedzieć 500.

Wielkie dzięki.

+0

Dostałeś nigdzie z tym? –

+0

Obawiam się, że nie. – Markus

Odpowiedz

2

Zmień swój kod do tego:

[WebMethod] 
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] 
public void TestWebMethod() { 
    try { 
     throw new HttpException((int)HttpStatusCode.BadRequest, "Error Message"); 
    } 
    catch (HttpException ex) { 
     Context.Response.StatusCode = ex.GetHttpCode(); 

     // See Markus comment 
     // Context.Response.StatusDescription("Error Message"); 
     // Context.Response.StatusDescription(ex.Message); // exception message 
     // Context.Response.StatusDescription(ex.ToString()); // full exception 
    } 
} 

Zasadniczo nie można, to jest, gdy rzuca wyjątek wynik będzie zawsze taki sam 500.

+0

Powoduje to problem odwrotny. Wyjątek nigdy nie prowadzi do odpowiedzi. Klient ma kod statusu, ale nie komunikat o błędzie. – Markus

+0

Dlaczego nie Response.StatusDescription (ex.ToString()), aby mieć obie? Właśnie zaktualizowałem moją odpowiedź. –

+1

StatusDescription powinien odzwierciedlać kod stanu (OK dla 200, nieznaleziony dla 404 itd.). Nie powinna to być wartość niestandardowa. – Markus

Powiązane problemy