2013-01-10 28 views
7

Trong ASP.NET ASMX WebMethod trả lời JSON, tôi có thể ném cả ngoại lệ & đặt mã phản hồi HTTP không? Tôi nghĩ nếu tôi đã ném một HttpException, mã trạng thái sẽ được thiết lập một cách thích hợp, nhưng nó không thể nhận được dịch vụ để đáp ứng với bất cứ điều gì nhưng một lỗi 500.Tôi có thể đặt mã phản hồi HTTP và ném ngoại lệ trên dịch vụ JSON ASMX không?

Tôi đã thử những điều sau đây:

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

Ngoài ra:

[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; 
    } 
} 

Những cả phản ứng với 500.

Rất cám ơn.

+0

Em bắt được bất cứ nơi nào với điều này? –

+0

Tôi không sợ. – Markus

Trả lời

2

Thay đổi mã của bạn như thế này:

[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 
    } 
} 

Về cơ bản bạn có thể không, có nghĩa là, khi ném một ngoại lệ kết quả sẽ luôn luôn giống nhau 500.

+0

Điều này gây ra vấn đề ngược lại. Ngoại lệ không bao giờ làm cho nó phản ứng. Khách hàng có mã trạng thái nhưng không có thông báo lỗi. – Markus

+0

Tại sao không Response.StatusDescription (ex.ToString()) để có cả hai? Chỉ cần cập nhật câu trả lời của tôi. –

+1

StatusDescription phải phản chiếu Mã trạng thái (OK cho 200, Không tìm thấy cho 404, v.v.). Nó không phải là một giá trị tùy chỉnh. – Markus