Сделать IIS не отображать страницы как WML. Когда-либо!
Некоторые фон
Сейчас я работаю над мобильным сайтом, поэтому я постоянно переключаю пользовательский агент в Firefox с помощью переключателя User Agent (прекрасный аддон), Но когда я перехожу на админ-сайт, он отображает WML, что делает Firefox все запутанным, поэтому он пытается загрузить его, а не показывать контент. И это заставляет меня расстраиваться (не падать с разочарованием, но достаточно!).
Что я хочу!
Как я могу сделать наш админ-сайт ВСЕГДА отправлять контент как text/html
вместо WML, независимо от пользовательского агента запроса?
У меня есть полный контроль над коробкой. Это IIS 6.0.
Ответы
Ответ 1
Если вы хотите изменить no-code/no-aspx, вы можете добавить файл возможностей браузера в папку App_Browsers прямо под вашим корнем приложения (если папка не там, просто создайте его). Чтобы отключить WML, просто поместите файл с именем ForceHtml.browser(все, что заканчивается на .browser), содержащий следующий XML:
<browsers>
<browser refID="Default">
<capabilities>
<capability name="preferredRenderingMime" value="text/html" />
<capability name="preferredRenderingType" value="html32" />
<capability name="preferredImageMime" value="image/gif" />
<capability name="tagwriter" value="System.Web.UI.HtmlTextWriter" />
</capabilities>
<controlAdapters markupTextWriterType="System.Web.UI.HtmlTextWriter" />
</browser>
</browsers>
Ответ 2
У нас было это, и поскольку мы используем бритву с html, страницы не могут автоматически адаптироваться. Для меня самым простым решением было изменение типа содержимого в _ViewStart.cshtml
:
Response.ContentType = "text/html";
"Определить тип контента самостоятельно" безумие происходит только тогда, когда ничего не задано явно. Итак... установите его.
Ваши фактические представления все равно могут переопределить это:
@{
Layout = null;
Response.ContentType = "application/atom+xml";
}
Для получения информации об этой проблеме на локальном dev-сервере (с чистым кешем, чтобы избежать ложных результатов по предыдущим кэшированным данным), сделайте что-нибудь вроде wget или Fiddler:
wget yourpage --header="Accept: text/vnd.wap.wml" --server-response --header="Accept-Encoding: gzip, deflate"
и найдите:
Content-Type: text/vnd.wap.wml; charset=utf-8
в результате; если вы это видите, IIS/ASP.NET решил притвориться, что ваш ответ удовлетворяет запросу "Принять" заголовок... даже если это не так. Хуже того: теперь вы можете получить этот "текст/vnd.wap.wml" из wget без, указав заголовок Accept (или указав что-то вроде "text/html" ); если вы видите эту проблему , у вас есть проблема (или: ваши пользователи) - у вас есть кешированный ответ для WAP, который подается на не-WAP-клиенты.
С помощью вышеуказанной настройки первый wget вернет текст /html "- так как это наш контент. Извините, браузеры нижнего уровня; вы должны включить "text/html" в качестве опции - и если вы не можете обработать "text/html"... отстой, чтобы быть вам.
Ответ 3
используя iis7. Полагая, что это global.asax сделал трюк:
void Application_OnUpdateRequestCache() {
if (Response.ContentType == "text/vnd.wap.wml") {
Response.ContentType = "text/html";
}
}
HTH
Ответ 4
Как обходной путь (если вам не удается настроить приложение), вы можете установить надстройку wmlbrowser для firefox https://addons.mozilla.org/en-US/firefox/addon/62.
Ответ 5
Похоже, что это больше связано с вашей административной системой, когда ящик IIS в качестве сайта-администратора видит пользовательский агент в качестве мобильного устройства и меняет способ его передачи от стандартного HTML до .wml. Вам нужно будет изменить это в приложении, которое я считаю.
Ответ 6
Настроить тип MIME для расширения wml в text/html. Вы также можете создать Custom HTTPHandler и указать карту script для расширения для ASP.NET. Затем вы можете проверить условия и принудительно выполнить рендеринг любым способом, который вы хотите.
Ответ 7
Вы можете переопределить поведение сервера с помощью ClientTarget свойства страницы.
В коде:
Page.ClientTarget = "uplevel";
В объявлении @Страница:
<%@Page [...] clientTarget="uplevel" %>
К сожалению, я не думаю, что вы можете установить это в элементе страницы web.config.