从 IParameterInspector AfterCall 可以处理的 WCF Rest 服务返回带有消息的 HttpStatus 代码

Posted

技术标签:

【中文标题】从 IParameterInspector AfterCall 可以处理的 WCF Rest 服务返回带有消息的 HttpStatus 代码【英文标题】:Returning HttpStatus codes with message from WCF Rest service that IParameterInspector AfterCall can handle 【发布时间】:2011-04-24 05:44:04 【问题描述】:

那么,我在几个服务中拥有了许多方法,我用自定义属性进行了装饰。

该属性使用来自IOperationBehaviorApplyDispatchBehavior 附加到方法,并使用来自IParameterInspectorBeforeCallAfterCall 方法在调用服务方法之前和之后进行一些处理。

一切都很好,很好…… 当服务方法需要与消息一起返回 http 状态时,问题就出现了。我能找到的唯一方法是让方法抛出 WebFaultException<T> 传递我们的消息和适当的 http 状态。

这个问题是附加属性的AfterCall 永远不会被调用。

它的长短是:

有没有返回消息的方法 并设置http状态而不 抛出异常? 如果我必须抛出 WebFaultException<T>,是否可以通过返回的消息调用我的属性?

【问题讨论】:

【参考方案1】:

好的,经过大量搜索,我找到了this question 和this answer

总结一下:调用一个小方法,例如:

public void SetResponseHttpStatus(HttpStatusCode statusCode)

    var context = WebOperationContext.Current;
    context.OutgoingResponse.StatusCode = statusCode;

...在每个不是普通 200 响应的返回之前都应该这样做。

【讨论】:

有趣。我要返回 Json。 ContentType 是 application/json,但是,一旦我设置 WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.Created (201),ContentType 就会切换到 application/xml。

以上是关于从 IParameterInspector AfterCall 可以处理的 WCF Rest 服务返回带有消息的 HttpStatus 代码的主要内容,如果未能解决你的问题,请参考以下文章

R生存分析AFT

鍥捐В鍏辫瘑绠楁硶锛歊aft

WCF - 获取原始请求/回复和操作名称

HwPointEventFilter: do not support AFT because of no config华为手机进入工程菜单

systemd[1]: mariadb.service: Can't open PID file /data/mariadb/mysql/30-mariadb-1.pid (yet?) aft

Codeforces 279CLadder