2010-11-13 3 views
1

J'ai besoin d'avance. J'envoie une requête HTTP GET et j'analyse la réponse HTML, si la réponse HTML (chaîne html) consiste en une sous-chaîne, je veux envoyer à l'application cliente, (application WPF) un message d'erreur/d'avertissement.WPF, gérer avec message d'erreur et d'avertissement

Dans ma solution, si la chaîne html consiste en une sous-chaîne je lance une nouvelle exception, c'est stupide, quelle solution convient à ce problème?

Code

est ici:

private bool SendRp(string postData) 
    { 
     bool result = false; 

     const string parameters = @"&lok=1&rpI=3"; 
     string htmlStringResult = HttpPostReq(
      new Uri(string.Format(CultureInfo.InvariantCulture, "{0}{1}{2}", PokecUrl.Rp, Account.SessionId, parameters)), postData); 
     try 
     { 
      if (htmlStringResult.ToLower(new CultureInfo("sk-Sk")).Contains("is is empty")) 
      { 
       throw new ArgumentException("ID is empty!"); 
      } 
      if (htmlStringResult.ToLower(new CultureInfo("sk-Sk")).Contains("id does not exist")) 
      { 
       throw new ArgumentException("ID does not exist."); 
      } 
      if (htmlStringResult.ToLower(new CultureInfo("sk-Sk")).Contains("blocked")) 
      { 
       throw new WebException("Your ID is blocked!"); 
      } 
      if (!htmlStringResult.ToLower(new CultureInfo("sk-Sk")).Contains("message was send")) 
      { 
       Match match = Regex.Match(htmlStringResult, @"\bhs=\w{15}\b"); 

       if (match.Success) 
       { 
        result = true; 
       } 
       else 
       { 
        throw new Exception("Some problem"); 
       } 

      } 
      return result; 
     } 
     catch (Exception exception) 
     { 
      throw exception; 
     } 
    } 
+0

Je comprends le problème est à jeter des exceptions. Pourquoi c'est un problème? –

Répondre

0

Si vous souhaitez stocker plusieurs erreurs/avertissements en raison de l'analyse syntaxique du HTML, utilisez une collection de messages.

Vous pouvez définir une telle collection de messages comme celui-ci:

public class MessageCollection : Collection<Message> 
{ 
} 

public class Message 
{ 
    public Message(Severity severity, string message) 
    { 
     Severity = severity; 
     Message = message; 
    } 

    public Severity Severity { get; private set; } 
    public string Message { get; private set; } 
} 

public enum Severity 
{ 
    Error, 
    Warning, 
    Info 
} 

Vous pouvez utiliser ces classes comme ceci:

var messages = new MessageCollection(); 

messages.Add(new Message(Severity.Warning, "This is a warning")); 
messages.Add(new Message(Severity.Error, "This is an error")); 

De cette façon, vous pouvez gagner plusieurs messages d'analyser le code HTML. Si vous le souhaitez, vous pouvez toujours jeter une exception, mais avec ces messages:

public class MessageException : Exception 
{ 
    public MessageException(MessageCollection messages) 
     : base("One or more messages were collected") 
    { 
     Messages = messages; 
    } 

    public MessageCollection Messages { get; private set; } 
} 

Et puis jeter cette exception comme ceci:

var messages = new MessageCollection(); 

messages.Add(new Message(Severity.Warning, "This is a warning")); 
messages.Add(new Message(Severity.Error, "This is an error")); 

if (messages.Count > 0) 
    throw new MessageException(messages); 
Questions connexes