11

在响应 JSON 的 ASP.NET ASMX WebMethod 中,我可以同时抛出异常并设置 HTTP 响应代码吗?我想如果我抛出一个 HttpException,状态码会被适当地设置,但它不能让服务响应任何东西,除了 500 错误。

我尝试了以下方法:

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

还:

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

这些都以 500 响应。

非常感谢。

4

1 回答 1

4

将您的代码更改为:

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

基本上你不能,也就是说,当抛出异常时,结果总是相同的 500。

于 2013-06-07T08:56:43.420 回答