2011-05-06 66 views
7

我正致力於在.NET中的HttpWebRequest/HttpWebResponse類型之上構建流暢的REST客戶端界面。到目前爲止,這麼好......但我試圖開發一個可自動處理安全令牌協商,令牌刷新等的可插入安全框架。有沒有辦法在400/500狀態碼上更改HttpWebRequest行爲?

由於HttpWebRequest/Response工作方式的性質,我遇到了一個問題當他們遇到400系列或500系列的HTTP狀態碼時。他們不會簡單地設置.StatusCode.StatusDescription屬性,並允許您以任何方式處理,他們會拋出WebException。一般來說,這可能不是問題......但是,我們的身份驗證方式(衍生OAuth 2.0),我需要處理某些400系列錯誤,而不會發生異常。

是否有某種方法可以重新配置HttpWebRequest/Response而不是拋出WebException,並允許消費者確定自己的錯誤處理?我知道有一些處理Expect-100的全面方法 - 繼續使用舊的Http1.0服務器......我很好奇是否有類似的全面禁用WebExceptions的方法。

(哦,只是無法抗拒...一個大膽的SHOUT OUT給我的好友在RedGate非法帶走Reflector 6的授權綁定免費版本......我可能能夠如果我可以窺探代碼...但可惜...反射器現在已經消耗了自己的能量,但現在它已經消失了; P)

+1

就反射器去,嘗試使用ILSpy。 – BKewl 2013-07-09 18:52:54

回答

8

我有一個類似的問題,並解決了它與以下幫手方法:

public static HttpWebResponse MakeRequest(HttpWebRequest request) 
{ 
    try 
    { 
     return (HttpWebResponse)request.GetResponse(); 
    } 
    catch (WebException we) 
    { 
     if (we.Response != null) 
     { 
      return (HttpWebResponse)we.Response; 
     } 
     throw; 
    } 
} 
+1

感謝您的回答。我最終最終做了幾乎相同的事情。我不知道爲什麼微軟選擇強制用戶在發生錯誤類型狀態代碼的情況下捕獲異常......但這確實讓事情變得困難。漂亮的小助手...可能會嘗試使它成爲HttpWebRequest上的擴展方法,儘管...使得它更易於使用。 ;) – jrista 2011-06-08 18:10:52

相關問題