Сделайте так, чтобы IIS не отображал страницы как WML. Когда-либо! - PullRequest
10 голосов
/ 11 августа 2009

Некоторый фон

В настоящее время я работаю на мобильном сайте, поэтому я постоянно переключаю пользовательский агент в Firefox с Переключатель пользовательского агента (отличное дополнение). Но когда я захожу на сайт администратора, он отображается как WML , что запутывает Firefox, поэтому он пытается загрузить его, а не показывать содержимое. И это делает меня разочарованным (не разочарованным, но достаточным!).

Что я хочу!

Как я могу заставить наш сайт администратора ВСЕГДА отправлять контент как text/html вместо WML, независимо от запроса пользовательского агента?

У меня есть полный контроль над коробкой. Это IIS 6.0.

Ответы [ 7 ]

11 голосов
/ 06 мая 2011

У нас было это , и поскольку мы используем бритву с html, страницы не могут адаптироваться автоматически. Для меня самым простым исправлением было изменение типа контента в _ViewStart.cshtml:

Response.ContentType = "text/html";

Безумие "сам разберись в типе контента" происходит только тогда, когда ничего явно не установлено. Итак ... установите его.

Ваши фактические просмотры все еще могут переопределить это:

@{
    Layout = null;
    Response.ContentType = "application/atom+xml";
}

Для информации, чтобы проверить эту проблему на вашем локальном сервере разработки (с чистым кешем, чтобы избежать ложных результатов по предыдущим кэшированным данным), сделайте что-то вроде 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 решил сделать вид, что ваш ответ удовлетворяет заголовку запроса «Принять» ... даже если это не так. Хуже того: теперь вы можете получить этот "text / vnd.wap.wml" из wget без без указания заголовка Accept (или с указанием чего-то вроде "text / html"); если вы видите это , у вас есть проблема (или: ваши пользователи видят) - у вас есть кэшированный ответ для WAP, который подается клиентам не-WAP.

С помощью приведенной выше настройки первый wget вернет "text / html" - так как это то, что наш контент. Извините, браузеры нижнего уровня; Вы должны были включить "text / html" в качестве опции - и если вы не можете обработать "text / html" ... отстой, чтобы быть вами.

8 голосов
/ 22 августа 2009

Если вы хотите изменить 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 голосов
/ 21 января 2012

с использованием iis7. это глобальный. asax добился цели:

void Application_OnUpdateRequestCache() {
  if (Response.ContentType == "text/vnd.wap.wml") {
    Response.ContentType = "text/html";
  }
}

НТН

1 голос
/ 21 августа 2009

В качестве обходного пути (если вам не удается настроить приложение), вы можете установить дополнение wmlbrowser для firefox https://addons.mozilla.org/en-US/firefox/addon/62.

0 голосов
/ 21 августа 2009

Вы можете переопределить поведение сервера с помощью свойства ClientTarget страницы.

В коде:

Page.ClientTarget = "uplevel";

В объявлении @ Page:

<%@Page [...] clientTarget="uplevel" %>

К сожалению, я не думаю, что вы можете установить это в элементе pages web.config.

0 голосов
/ 21 августа 2009

Настройте тип MIME для расширения wml на text / html. Вы также можете создать Custom HTTPHandler и указать карту сценариев для расширения на ASP.NET. Затем вы можете проверить условия, которые у вас есть, и форсировать рендеринг любым удобным вам способом.

0 голосов
/ 12 августа 2009

Похоже, это больше связано с вашей системой администрирования, так как окно IIS в качестве сайта администратора рассматривает пользовательский агент как мобильное устройство и изменяет способ обработки вашего запроса, от стандартного HTML до .wml. Вам нужно изменить это в приложении, которое я считаю.

...