C# 返回HttpStatus代码,其中包含IPParameterInspector AfterCall可以处理的来自WCF Rest服务的消息

C# 返回HttpStatus代码,其中包含IPParameterInspector AfterCall可以处理的来自WCF Rest服务的消息,c#,.net,wcf,.net-4.0,wcf-rest,C#,.net,Wcf,.net 4.0,Wcf Rest,然后,我在几个服务中使用了许多方法,并使用自定义属性对这些方法进行了修饰 该属性使用IOperationBehavior中的ApplyDispatchBehavior附加到方法,并使用ipParameterInspector中的BeforeCall和AfterCall方法在调用服务方法之前和之后执行一些处理 一切都很好,很好,很好。。。 当服务方法需要返回http状态和消息时,就会出现问题。我能找到的唯一方法是该方法抛出一个WebFaultException传入消息和相应的http状态 问题是附

然后,我在几个服务中使用了许多方法,并使用自定义属性对这些方法进行了修饰

该属性使用
IOperationBehavior
中的
ApplyDispatchBehavior
附加到方法,并使用
ipParameterInspector
中的
BeforeCall
AfterCall
方法在调用服务方法之前和之后执行一些处理

一切都很好,很好,很好。。。 当服务方法需要返回http状态和消息时,就会出现问题。我能找到的唯一方法是该方法抛出一个
WebFaultException
传入消息和相应的http状态

问题是附加属性的
AfterCall
从未被调用

它的长短是:

  • 有没有办法回信 以及设置http状态,而无需 抛出异常
  • 如果我必须抛出一个
    WebFaultException
    是否仍有方法通过返回的消息调用我的属性

经过大量搜索,我找到了

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

public void SetResponseHttpStatus(HttpStatusCode statusCode)
{
    var context = WebOperationContext.Current;
    context.OutgoingResponse.StatusCode = statusCode;
}

…在每次返回之前,如果不是一个普通的200响应,则应该这样做。

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