WPF, обрабатывать с ошибкой и предупреждением - PullRequest
1 голос
/ 13 ноября 2010

Мне нужно заранее.Я отправляю запрос HTTP GET и анализирую ответ HTML, если ответ HTML (строка html) содержит некоторую подстроку, я хочу отправить в клиентское приложение (приложение WPF) какое-либо сообщение об ошибке / предупреждение.

В моем решении, если htmlстрока состоит из некоторой подстроки выкидываю новое исключение, глупо, какое решение подходит для этой проблемы?

код здесь:

    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;
        }
    }

1 Ответ

0 голосов
/ 13 ноября 2010

Если вы хотите сохранить несколько ошибок / предупреждений из-за анализа HTML, используйте коллекцию сообщений.

Вы можете определить такую ​​коллекцию сообщений следующим образом:

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
}

Вы можете использовать эти классы так:

var messages = new MessageCollection();

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

Таким образом, вы можете собирать несколько сообщений при разборе HTML. Если хотите, вы все равно можете выбросить исключение, но затем с этими сообщениями:

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

    public MessageCollection Messages { get; private set; }
}

А затем выбросить это исключение так:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...