Ошибка возникает из-за того, что вы пытаетесь сериализовать объект, который не имеет атрибута [Serializable]
. Поскольку это базовый класс, вы также не можете добавить его.
Объект HttpClient
предназначен для повторного использования, это просто вопрос того, как в вашем приложении. Как правило, вы оборачиваете фреймворк HttpClient
в класс, который выполняет определенное действие, которое вам требуется, и используете его как Singleton.
Похоже, что это более или менее то, что вы делаете, поэтому проблема в том, что ваше приложение часто запускается и останавливается, что приводит к воссозданию объекта.
Если вы хотите что-то запускать периодически, сохраняя состояние, тогда лучшим инструментом для работы будет Служба Windows
Если вы выполняете свой запрос на основании получения другого запроса в своем веб-приложении, вам следует использовать Dependency Injection с областью действия Singleton. Это сохранит объект живым, пока включен пул приложений. При необходимости вы можете увеличить время простоя в IIS. Я думаю, что по умолчанию это 15 минут, что гарантирует не более 4 входов в час.
EDIT:
Поскольку основная проблема заключается в разработке и тестировании, вам следует немного обмануть. Используя прокси, такой как Fiddler, вы можете записать шаги, предпринятые для входа в систему вручную. На что нужно обратить внимание - это заголовки Http. Большинство данных типа аутентификации / сеанса будут либо в заголовке Cookie
, либо в заголовке Authorization
. Также могут быть заголовки типа X-Session-ID
или аналогичные. Вы должны иметь возможность вручную скопировать заголовки после успешного входа в систему, а затем вставить их в свой код. Такой клиент, как Postman, может быть очень полезен для точного определения, какие именно заголовки требуются.
Ваш код может выглядеть следующим образом:
public static void ResetHttpClient()
{
Client = new HttpClient();
if (isDevelopment) // however you determine it
{
Client.DefaultRequestHeaders
.TryAddWithoutValidation("Authorization", "Bearer hhxcshRT43bhJHjh53hkjhbhvghf54g5hbhkghfdUGUKGYFDJihu5");
Client.DefaultRequestHeaders
.TryAddWithoutValidation("Cookie", "SessionID=36dab-3545-adef");
}
}