1

Возможно, для кода продукта не существует смысла создавать экземпляры этих типов, но усталость констекторов сделала модульные тесты клиентов, которые используют Http реализации WebRequest/Response гораздо больше проблем, чем должно быть. Я не вижу никакой ценности в том, чтобы отвлечь конструкторов и дать им очевидную ценность, так какова техническая причина их устаревания?Почему разработчики HttpWebRequest и HttpWebResponse были удалены из .NET?

ответ

2

Хм, зачем именно вам нужен конструктор HttpWebRequest? Я не вижу никаких предпочтений по сравнению с WebRequest.Create, который предлагается как предпочтительный способ создания таких запросов во всех версиях с самого начала.

Этот метод возвращает HttpWebRequest как WebRequest, но вы по-прежнему можете направить его прямому типу для своих нужд. Если вы предоставите некоторые другие протоколы, как file:// или ftp://, он вернет соответствующие типы.

Я думаю, что этот Obsolete list является частью стандартизации .NET Core для всех платформ, которые он будет использоваться, и будет намного проще поддерживать создание WebRequest в одной точке кода.

Update:
Я думаю, что вы видели эту статью о deriving the WebRequest class, так что я просто напишу здесь еще один пакет моего мнения:

Когда вы Деринг из WebRequest, вам нужно два очка :

Как MSDN говорит:

HttpWebRequest класс зарегистрирован для обслуживания запросов по HTTP и HTTPS схемы по умолчанию. Попытки зарегистрировать другого потомка WebRequest для этих схем потерпят неудачу.

Таким образом, Microsoft хочет контролировать http и https ориентированных классов и не хотят, чтобы кто-заменить эту функциональность с их собственной. Я думаю, что это может быть сделано из-за некоторых проблем безопасности. Печально, но верно.

+0

'WebRequest.Create' отлично подходит для создания экземпляров объектов запроса и мог быть исключен из вопроса. Проблема заключается в том, что вы пытаетесь наследовать от класса (в частности, «WebResponse») или создавать его для модульного тестирования, и вы не можете этого сделать. Например, если у меня есть метод десериализации, например 'public T DeserializeResponse (HttpWebResponse resp)' Мне нужно использовать непрактичную работу, чтобы проверить это, а не на очевидный make-экземпляр передать метод, утверждать против 'T'. – evanmcdonnal

+0

@evanmcdonnal Обновлен ответ, но у вас пока нет способа помочь (я думаю, что вопрос рано или поздно будет закрыт как слишком широкий) – VMAtm

+0

Да, все в порядке. Это несколько не соответствует критериям SO, потому что это можно считать субъективным. Спасибо за информацию. Шаги, о которых вы говорите, в результате получения WebRequest - это именно то, что я пытаюсь сделать. Я расстроен тем, что мои способности модульных тестов делают это для «WebResponse», но не «HttpWebResponse». Дело в том, что я тоже пытаюсь использовать другую схему ('test: //'), тогда моя тестовая конфигурация будет иметь этот префикс вместо http для URL-адресов. – evanmcdonnal