2013-01-10 2 views
7

JSONに応答するASP.NET ASMX WebMethodでは、両方とも例外&にHTTP応答コードを設定できますか?私はHttpExceptionをスローした場合、ステータスコードが適切に設定されると思ったが、サービスは500エラー以外の応答を得ることはできない。HTTP応答コードを設定し、ASMX JSONサービスで例外をスローすることはできますか?

また
[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

多くのおかげで応答

は、私は、次の試してみました。

+0

になりますことができない、あなたはこれでどこに行くでしたか? –

+0

私は恐れていません。 – Markus

答えて

2
これにあなたのコードを変更

[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

+0

これは逆の問題を引き起こします。例外は応答に決してしません。クライアントにはステータスコードがありますが、エラーメッセージはありません。 – Markus

+0

Response.StatusDescription(ex.ToString())に両方を持たないのはなぜですか?ただ私の答えを更新しました。 –

+1

StatusDescriptionはStatusCode(200はOK、404は見つかりませんなど)をミラー化する必要があります。カスタム値であってはなりません。 – Markus

関連する問題