从 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 【问题描述】:那么,我在几个服务中拥有了许多方法,我用自定义属性进行了装饰。
该属性使用来自IOperationBehavior
的ApplyDispatchBehavior
附加到方法,并使用来自IParameterInspector
的BeforeCall
和AfterCall
方法在调用服务方法之前和之后进行一些处理。
一切都很好,很好……
当服务方法需要与消息一起返回 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 代码的主要内容,如果未能解决你的问题,请参考以下文章
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