3

Ajax を使用してクライアント側で呼び出す非常に単純な WCF Web サービスがあります。

これが私のWebサービスです:

public string TestService() {
    throw new Exception();
    return "";
}

クライアント側の Ajax 呼び出しは次のようになります。

var mySuccess = function(result,statuscode,xhr){
    alert('success');
}

var myFail = function(result,statuscode,xhr){
    alert('failure');
}

$.ajax({
    type: 'Post'
    contentType: "application/json; charset=utf-8",
    url: '../myService.svc/TestService',
    data: '',
    dataType: "json",
    success: mySuccess,
    error: myFail
});

この Web サービスは毎回失敗し (そうあるべきです!)、「500: 内部サーバー エラー」のステータスとコードを返します。「myFail」コールバック関数が正常に起動されます。

ただし、Web サービス内の応答ヘッダーを変更すると、次のようになります。

public string TestService() {
    WebOperationContext.Current.OutgoingResponse.Headers.Add("token", "1");
    throw new Exception();
    return "";
}

返されるステータス/コードは、毎回「200: OK」です!

これは、Web サービスが失敗している場合でも、毎回「mySuccess」関数が起動されることを意味します。独自のカスタム ヘッダーを応答に追加するだけで、このようにリターン ステータスが上書きされる理由がわかりません。

足りないものはありますか?

4

1 に答える 1

0

WebFaultExceptionオプションは、意味のある HTTP ステータスとメッセージをスローすることです。例: throw new WebFaultException("Invalid request received.", HttpStatusCode.BadRequest);
BadReuqest コードは 400 です。

于 2013-07-23T09:11:40.280 に答える