Сделать 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.