修改响应头时,WCF Web服务未返回正确的状态代码

时间:2012-05-07 13:32:30

标签: c# jquery .net web-services

我有一个非常简单的WCF Web服务,我在客户端使用Ajax调用:

这是我的网络服务:

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'!

这意味着每次都会触发'mySuccess'函数,即使Web服务失败也是如此。我无法弄清楚为什么简单地将自己的自定义标头添加到响应中会以这种方式覆盖返回状态。

我有什么遗失的吗?

1 个答案:

答案 0 :(得分:0)

一个选项是抛出一个有意义的HTTP状态和消息的WebFaultException。 示例: throw new WebFaultException("Invalid request received.", HttpStatusCode.BadRequest);
BadReuqest代码为400。