2013-02-22 120 views
1

我正在構建一個.NET 4.5 MVC 4 Web API,該API將公開公開我希望訪問的控制器方法。我創建了一個行爲過濾器屬性檢查如下圖所示燒燬爲了簡潔正確編碼的RSA令牌:Compact Framework中的HttpResponseMessage內容屬性

public class TokenValidationAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(HttpActionContext actionContext) 
    { 
     try 
     { 
      //authorize user 
     } 
     catch (Exception) 
     {     
      actionContext.Response = new HttpResponseMessage(HttpStatusCode.Forbidden) 
      { 
       Content = new StringContent("Unauthorized User") 
      };     
     } 
    } 
} 

然後在我的.NET CF 3.5應用程序,我將做到以下幾點:

public static List<string> GetAvailableProjectIds() 
     { 
     var idList = new List<string>(); 
     var url = "the url"; 
     var req = CreateRequest(url, true); 

     try 
     { 
      using (var response = (HttpWebResponse)req.GetResponse()) 
      { 
       //do something with the resonse 
      } 
     } 
     catch (Exception ex) 
     { 

     } 

     return idList; 
    } 

被捕獲的異常是WebException幷包含正確的403 Forbiden狀態碼。但沒什麼幫助,我可以找到。

有沒有辦法獲得Content屬性,以便我可以向最終用戶展示他們嘗試使用「未經授權的用戶」進行身份驗證?

+0

你的意思是,在它「未授權用戶」的內容沒有身體?此外,如果爲什麼不發送「未經授權」狀態代碼而不是此場景? – 2013-02-23 01:03:14

+0

不,在調試模式下查看WebException時,我沒有在任何地方看到「未經授權的用戶」。使用「未經授權」狀態碼的點。這比「福爾拜登」更有意義。但是,有很多情況下,狀態代碼不足以提供足夠的信息。也許你正在查詢一個Web服務,告訴你什麼時候你最喜歡的運動隊今晚出場。難道你不想回復一條消息:「對不起你的團隊今晚不玩」,而不是「NotFound」的迴應? 「NotFound」得到了重點,但幾乎沒有那麼友好。 – nitewulf50 2013-02-23 03:17:30

+0

當然,有一個消息肯定是有用的......只是可以肯定,你可以檢查通過提琴手什麼樣的響應是服務返回只是爲了消除服務的任何問題 – 2013-02-23 19:14:47

回答

0

我從來沒有真正喜歡過這樣的行爲,當通信很好時它會使用異常。嘗試添加此擴展方法:

private static HttpResponse GetAnyResponse(this HttpRequest req) 
{ 
    HttpResponse retVal = null; 

    try 
    { 
     retVal = (HttpWebResponse)req.GetResponse() 
    } 
    catch (WebException webEx) 
    { 
     retVal = webEx.Response; 
    } 
    catch (Exception ex) 
    { 
     // these are the "bad" exceptions, let them pass 
     throw; 
    } 

    return webEx; 
} 

然後你的代碼改成這樣:

using (var response = (HttpWebResponse)req.GetAnyResponse()) 
{ 
    //do something with the resonse 
} 
+0

很明顯,一旦你有Response對象,你可以訪問標題,正文等... – tcarvin 2013-02-28 13:07:40