2010-10-12 21 views
2

那麼,我已經用一個自定義屬性裝飾了幾個服務中的一些方法。返回HttpStatus代碼和來自WCF的消息Rest服務IParameterInspector AfterCall可以處理

該屬性使用從IOperationBehaviorApplyDispatchBehavior附加到方法,並從IParameterInspectorBeforeCallAfterCall方法之前,服務方法被調用後做一些處理。

一切都很好,很好... 當服務方法需要返回一個http狀態和一條消息時,問題出現了。我能找到的唯一方法就是讓方法在我們的消息中傳遞一個WebFaultException<T>並傳遞適當的http狀態。

與此問題是附加屬性的AfterCall永遠不會被調用。

長期和短期的是:

  • 是否有返回的消息 和設置HTTP狀態,而不 拋出異常的方法嗎?
  • 如果我必須拋出WebFaultException<T>有沒有辦法讓我的屬性仍然可以用返回的消息調用?

回答

4

很多搜​​索的確定後,我發現this questionthis answer

所以總結:調用像一個小方法:

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

...每個不返回之前一個普通的200響應應該這樣做。

+0

有趣。我回來了Json。 ContentType是application/json,但是,只要我設置WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.Created(201),ContentType就切換到application/xml。 – Rhyous 2017-10-24 14:32:14