日前在處理一件利用泛型處理常式（.ashx）輸出JSON格式資訊的問題，裡面有用到System.Web.MimeMapping.GetMimeMapping這個靜態方法，依照所指定的檔案副檔名，轉換成MIME後自動指定到ContentType，結果出現了結果不一致的問題。所謂的結果不一致就是同一支程式碼，我在Chrome裡面觀察會變成JSON檔案下載，可是在Edge裡面又變成可以正確地把JSON打在網頁上，真的很詭異。
經過抽絲剝繭後，發現是瀏覽器對於「application/octet-stream」的解釋問題，Chrome會將其變成檔案下載，而Edge會將這個資料辨識成正確的JSON格式文件，因此直接將其顯示在網頁上。但是，這些都不是真正的問題，問題是本來應該要被系統自動輸出的MIME:「application/json」，怎麼就這樣憑空被改成「application/octet-stream」了？這樣的程式碼我也有在其他的地方撰寫過，用的也都是.NET Framework 4.5以上，為何其他地方一樣的寫法就不會有問題呢？
調用程式碼如下：
經過一番搜尋後，終於理解到System.Web.MimeMapping.GetMimeMapping與你的.NET Framework版本號無關，反而與你的執行環境「IIS」、「Registry」比較有關，於是我開始了解到為何我之前的寫法可以被正確的解出「application/json」，因為我的執行環境是Windows Server 2016，而解不出這個JSON MIME的環境是比較老舊的Windows Server 2008。
一旦找出問題，就比較好修正了。
修正System.Web.MimeMapping.GetMimeMapping在比較老舊的Windows下，無法正確輸出MIME的方式：
Step 1. 打開Internet Information Services，請到最上方的機器設定項次，而不要點選到個別網站，這樣才能全網站套用繼承，看到後點選右方中間的「MIME類型」。
Step 2. 點選新增，然後在副檔名中輸入「.josn」、MIME類型輸入「application/json」。
Step 3. 可以的話，做一下IISRESET，就大功告成了。