2014-05-20 42 views
1

我們有一個WCF服務,使用webhttp綁定。用戶得到認證,然後調用一個方法。在該方法中,我們檢查與用戶相關的各種設置和特定於請求的一些信息,然後知道用戶是否被授權進行呼叫。在WCF中處理未經授權的請求?

既然這是WCF,我想我應該拋出某種FaultException,但目前還不清楚是否有最佳實踐。

我的想法是,一旦我知道什麼是例外,我會扔,我想補充一個IErrorHandler這將正確設置標頭403

兩個問題: 1)是否有一個標準的FaultException未授權要求?即相當於http狀態碼403? 2)我應該能夠處理我將拋出的異常並將響應代碼更改爲403?我能否通過自定義錯誤消息?我見過一些帖子,使用捕獲中的操作上下文設置頭文件不會傳播到客戶端。

理想我能狀態中包含「您必須是管理員組的一部分添加用戶」

回答

0

我繼續從FaultException派生自定義異常,然後添加一個IErrorHandler來設置適當的頭文件。

這似乎是兩全其美。代碼只會拋出從WCF中使用的異常派生出來的異常,並且特定於http綁定的所有處理都是通過業務邏輯之外的IErrorHandler完成的。

1

因爲你使用webhttp結合,傳統的WCF故障管理的其他信息設置爲403在這裏是不恰當的,最好使用WebFaultExceptionWebFaultException<>

Public string MyOperation() 
    // Operation logic 
    // ... 
    throw new WebFaultException<string>("You must be part of the administrators group to add a user", HttpStatusCode.Forbidden); 
} 

如您所想,在開發HTTP(REST-like)服務時使用標準HTTP狀態碼非常重要。

+1

我討厭採取WCF服務,不應綁定到綁定,並添加WebFaultException。我的想法是拋出一些標準的WCF未授權的異常,然後在可以綁定到端點的IErrorHandler中處理它。這樣業務邏輯代碼就不會綁定到webHttpBindings。 – bpeikes

0

這是我的經驗,拋出錯誤異常,至少與wshttpbinding和basichttpbinding,可能會導致您的Web服務失敗,所以我不建議這種方法。

如果您想發送郵件給未經授權的用戶,只需發送一個HTML回覆,將狀態設置爲400個似乎合適的回覆中的任何一個。

但是從經驗來看,即使它們是對用戶操作的控制響應,而不是來自實際的處理錯誤,也會導致Web服務失敗。我認爲他們應該保留真正的處理例外。

相關問題