使 IIS 不將頁面呈現為 WML。曾經!
一些背景
我目前正在開發一個移動網站,所以我一直在使用使用者代理切換器(可愛的外掛)在 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”……那麼你就糟透了。