Правильно обрабатывать определенные ответы HTTP (специфичные для ООП)

1

В настоящее время я пишу бота для браузера, и есть несколько ответов. Они незашифрованы, и данные предоставлены с помощью обычного ответа HTTP.

Поэтому, поскольку существует несколько несколько разных типов ответов и структур, я думал, что могу использовать свои (низкие) знания oop, чтобы справиться с этим, но моя концепция не работает.

Я думал, что могу сделать для каждого запроса (запрос на вход, запрос выхода, запрос на атаку, запрос урожая,..) собственный класс, который является дочерним по отношению к базовому классу запросов. И та же концепция, которую я думал, что могу сделать для ответов.

Итак, вот небольшая демонстрация моего кода:

public class BasicRequest
{

     public BasicRequest(string serverId) { }

     public virtual BasicResponse DoRequest(string[] requestData)
     {
         // request is handled here
     }

}

public class LoginRequest : BasicRequest
{

     public LoginRequest(string serverId) : base(serverId) { }

}

public class BasicResponse
{

     public BasicResponse(string[] responseData) { }

     public virtual void DoSomeStuffWithTheResponse() { }
}

public class LoginResponse : BasicResponse
{

     public LoginResponse(string[] responseData) : base(responseData) { }

     public override void DoSomeStuffWithTheResponse() { }

}

Это моя основная структура (из я имею еще несколько классов запросов и ответов). Теперь я попытался использовать его вот так:

LoginResponse response = new LoginRequest("serverXX").DoRequest(new string[] { "data" }) as LoginResponse;

Но тогда "ответ" равен нулю. Важно то, что он должен выполнять действия, которые выполняет конструктор базового класса (это некоторые базовые вещи, необходимые для каждого запроса и ответа), а затем конструктор и переопределение определенного класса (loginrequest/response в этом случае).

Надеюсь, вы можете помочь мне, спасибо в консультации.

  • 0
    Если я правильно прочитал, ваша проблема в том, что результат DoRequest(new string[] { "data" }) as LoginResponse равен null . В этом случае BasicResponse.DoRequest() не возвращает LoginResponse, но, скорее всего, BasicResponse. Вам необходимо переопределить DoRequest () в вашем классе LoginRequest и вернуть LoginResponse.
  • 0
    И поэтому, если я понимаю концепцию, которую я называю base.DoRequest (..), чтобы класс BasicResponse обрабатывал предварительную работу, верно?
Теги:
oop
http

1 ответ

1
Лучший ответ

Поскольку вы не переопределили DoRequest в своем классе LoginRequest, при вызове DoRequest вызывается DoRequest базовых классов.

Чтобы это работало, LoginRequest должен override базовую реализацию:

public class LoginResponse : BasicResponse
{
    public LoginResponse(string[] responseData) : base(responseData) { }

    public override void DoSomeStuffWithTheResponse()
    { 
    }

    public override BasicResponse DoRequest(string[] requestData) 
    {
        // Do stuff
        return new LoginResponse();
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню