Короче говоря, это не задокументировано / указано в терминах пользователей, а не в виде возможностей браузера.
В зависимости от используемого агента браузера настраивается набор возможностей.
Эти возможности настраиваются в .browser
файлы конфигурации на веб-сервере.
Например, .NET 4
вы найдете эти файлы в %SystemRoot%\Microsoft.NET\Framework\v4.0.30319\config\browsers
,
например, chrome.browser
, iphone.browser
, et c.
Такой * Файл 1013 * содержит возможность tagwriter
.
Например, chrome.browser
:
<browsers>
<!-- Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/530.1 (KHTML, like Gecko) Chrome/2.0.168.0 Safari/530.1 -->
<browser id="Chrome" parentID="WebKit">
<identification>
<userAgent match="Chrome/(?'version'(?'major'\d+)(\.(?'minor'\d+)?)\w*)" />
</identification>
<capabilities>
<capability name="browser" value="Chrome" />
<capability name="tagwriter" value="System.Web.UI.HtmlTextWriter" />
<!-- ... -->
</capabilities>
</browser>
</browsers>
Возможность tagwriter
определяет, будет ли создан экземпляр System.Web.UI.HtmlTextWriter
или System.Web.UI.Html32TextWriter
для записи вывод.
Конфигурация по умолчанию в файле Default.browser
объявляет tagwriter
как:
<capability name="tagwriter" value="System.Web.UI.Html32TextWriter" />
Кроме того, если возможность tagwriter
отсутствует, используется Html32TextWriter
.
Из справочного источника Microsoft :
internal HtmlTextWriter CreateHtmlTextWriterInternal(TextWriter tw) {
Type tagWriter = TagWriter;
if (tagWriter != null) {
return Page.CreateHtmlTextWriterFromType(tw, tagWriter);
}
// Fall back to Html 3.2
return new Html32TextWriter(tw);
}
Html32TextWriter
заявляет, что не отображает div
вокруг скрытых полей ввода.
Из Справочный источник Microsoft :
internal override bool RenderDivAroundHiddenInputs {
get {
return false;
}
}
HtmlTextWriter
действительно возвращает true
для RenderDivAroundHiddenInputs
, см. Micros .
Еще немного информации обо всем этом здесь .
Что вы можете сделать.
Если вы всегда хотите обертку div
, используйте один из хорошо известных юзерагентов, в противном случае используйте настраиваемый, например Test Client
, который вы уже используете.
Если вы контролируете запрашиваемый веб-сайт, вы можете настроить собственный .browser
файл для вашего пользовательского агента ... , но я бы предпочел не go таким образом ...
При выполнении запроса просто установите соответствующий заголовок User-Agent
запроса на вашем HttpClient
, например:
var client = new HttpClient();
var userAgent = "Test Client"; // Or "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36 Edg/83.0.478.37"
client.DefaultRequestHeaders.Add("User-Agent", userAgent);