Asp.net

使 IIS 不將頁面呈現為 WML。曾經!

  • January 20, 2012

一些背景

我目前正在開發一個移動網站,所以我一直在使用使用者代理切換器(可愛的外掛)在 Firefox 中切換使用者代理。但是當我進入管理站點時,它呈現為WML,這讓 Firefox 很困惑,所以它會嘗試下載它而不是顯示內容。這讓我感到沮喪(不是沮喪,而是足夠了!)。

我想要的是!

無論請求使用者代理如何,如何讓我們的管理站點始終發送內容text/html而不是 WML?

我完全控制了這個盒子。它是 IIS 6.0。

如果您想要無程式碼/無 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>

我們有這個,並且由於我們使用帶有 html 的 razor,頁面無法自動適應。對我來說,最簡單的解決方法是更改​​內容類型_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 已經決定假裝您的回复滿足請求的“接受”標頭……即使它不滿足。更糟糕的是:您現在可以從 wget 中獲取“text/vnd.wap.wml”,而無需指定 Accept 標頭(或指定類似“text/html”之類的內容);如果你看到這個你有一個問題(或者:你的使用者有問題) - 你有一個記憶體的 WAP 響應,它被饋送到非 WAP 客戶端。

通過上述調整,第一個 wget將返回“text/html”——因為這就是我們的內容。對不起,低級瀏覽器;您應該將“text/html”作為一個選項包含在內 - 如果您無法處理“text/html”……那麼你就糟透了。

引用自:https://stackoverflow.com/questions/1261144