2014-12-31 122 views
0

我需要格式化從Google返回的異常消息,並以最佳方式將它們呈現給最終用戶。 (使用C#)異常的如何從Google API錯誤消息中提取「消息」部分

格式:(在這種情況下我打電話聯繫SDK)

Google.Apis.Requests.RequestError.Entity已經存在。 [409]。 錯誤[。 留言[實體已經存在。] 位置[ - ]。 原因[複製] 域[全球]

另一個錯誤,

Google.Apis.Requests.RequestError.Domain用戶達到了限制。 [412]。 錯誤[。 留言[域用戶數量已達到上限。] 位置[IF-賽事 - 頭] 原因[limitExceeded] 域[全球]

如何從上述錯誤信息中提取 「消息」? (在上面的例子中「實體已經存在」或「達到域用戶限制」)

回答

1

這是Regix的工作。以下應該做你需要的東西:

 string message1 = "Google.Apis.Requests.RequestError.Entity already exists. " 
          +"[409]. Errors [. Message[Entity already exists.] Location [ - ] Reason [duplicate] Domain [global] .]"; 
     string message2 = "Google.Apis.Requests.RequestError.Domain user limit reached. " 
          +"[412]. Errors [. Message[Domain user limit reached.] Location [If-Match - header] Reason[limitExceeded] Domain[global] .]"; 

     string pattern = @"Message\[((\w+\s){2,}(\w+\s?)*)\.\]"; 

     Regex regex = new Regex(pattern); 

     Match m = regex.Match(message1); //or regex.Match(message2) 
     if (m.Success) 
     { 
      Group g = m.Groups[1]; //m.Groups[0] will Match 'Message[.....]' 
      CaptureCollection cc = g.Captures; 

      for (int i = 0; i < cc.Count; i++) 
      { 
       Capture c = cc[i]; 
       Console.WriteLine("Message: {0}", c); 
      } 
     } 

     Console.ReadLine(); 
+0

有一個小問題,這一點,「Google.Apis.Requests.RequestError.Not授權訪問該資源/ API [403] .Errors [\t留言[無權訪問該資源/ API]定位[ - ]原因[禁止]域[全局]。]。「;.由於「消息」(未授權訪問此資源/ API)此錯誤返回空,因此沒有句號「。」。任何建議? – Dhanuka777

1

試試這個模式。

string pattern = @「Message [([A-Za-z0-9- \ s *] +)] *」;

+0

這解決了沒有「。」的消息的問題。在消息塊中。 – Dhanuka777