c# - 修改响应 header 时,WCF web 服务未返回正确的状态代码

标签 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' 回调函数被触发。

但是,如果我在我的网络服务中修改响应 header ,如下所示:

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

然后返回的状态/代码每次都是“200:OK”!

这意味着每次都会触发“mySuccess”函数,即使网络服务应该失败。我不明白为什么只需将我自己的自定义 header 添加到响应中就会以这种方式覆盖返回状态。

有什么我想念的吗?

最佳答案

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

关于c# - 修改响应 header 时,WCF web 服务未返回正确的状态代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10483007/

相关文章:

c# - 如何在 .NET Compact Framework 中获取所有已加载程序集(引用)的编程列表

c# - 枚举/迭代 System.Windows.Forms.DataGrid 的行

javascript - $(this) 在 javascript 中

c# - 有没有办法自动覆盖类上的 ToString() ?

c# - 如何将 EntityReference(例如)写入 XmlWriter,由 XmlNodeReader 读取?

c# - 我可以使用 Ninject 将 IKernel 注入(inject)类吗

c# - 将位图数组转换为字节数组

javascript - 使用 jquery 处理 html 表上动态行上的帖子

javascript - 向脚本添加多个 AJAX 调用

c# - 检查列表中是否存在值 - 比循环更好的方法?