• 让IIS Express支持Json文件


    问题由来

      同事在做一个web系统的二级联动时将联动数据保存在一个Json文件中,当他将代码提交后,到我机子上运行时总是报该文件404错误,反复检查路径以及权限并没有问题。将问题反馈给他时,他表示在他机子上的本地IIS上运行并没有什么问题。。。等等,本地IIS,而我是运行在IIS Express中,显然由于本地IIS和IIS Express的配置差异导致的对Json文件处理方式不同导致的。

    解决问题

      我并没有马上去搜索本地IIS和IIS Express的差异,而是先翻了下他的代码:

    1  $.getJSON("../Content/file/resource.json", function (data)
    2       {
    3         //balablaablabn
    4           })

      使用的$.getJson(),(这个不常用,还是找下具体用法吧)。w3school的解释是通过 HTTP GET 请求载入 JSON 数据。语法:jQuery.getJSON(url,data,success(data,status,xhr)),相当于  

    $.ajax({
      url: url,
      data: data,
      success: callback,
      dataType: json
    });

      OK,返回数据类型为json的ajax请求,并没有对文件格式有特殊要求,既然这样,那我将其json文件修改成js文件应该就可以。

      实践证明将其resource.json文件改成resource.js即可,就不需关注IIS和IIS Express两兄弟有什么不同了。

      将我的修改想法告诉了同事,没想到此君表示,既然是IIS Express为什么要改他的代码,这个json文件存储的只是json数据,坚决不同意修改文件类型。-_-! -_-!

    问题再解决

      好吧,看来只有找找”两兄弟“的问题了,寻找解决方案......

      不一会同事通过内部通讯工具发来一个链接,链接是园子的一篇关于这个问题解决方案的文章。(对于这位“固执”而又积极寻找解决方案的同事我只能说一个字:屌 !)

      既然前辈们都已踩过坑了,那就好办。根据前辈的解决方案是IIS Express没有配置Json文件的处理程序,只要增加对应配置即可,IIS Express 对应配置文件夹为:

      “%UserProfile%DocumentsIISExpressconfig“

    这个文件夹有3个文件:applicationhost.config、aspnet.config、redirection.config。这里配置的文件是applicationhost.config。打开文件,找到配置节location>system.webServer>handlers,就是它了,在handlers下增加一个对于json文件的配置:

    <handlers accessPolicy="Read, Script">           
         <!-- 添加对Json文件的支持 -->
         <add name="Json" path="*.json" verb="GET,HEAD,POST" modules="IsapiModule" scriptProcessor="%IIS_BIN%asp.dll" resourceType="File" />
    </handlers>

    保存配置文件,重启IIS Express,成功!

      问题到此基本算是解决了,但是不安分的我到是对applicationhost.config这个配置文件有了兴趣。好吧,这个文件里面配置内容还是很丰富的,而且里面许多配置都能子啊IIS管理里工具里面见到(他们本来就是兄弟好嘛>_<!!!)。然后又去微软社区看了下关于IIS Express的介绍,大致系统了解了下IIS Express。

      我发现在location同一级的system.webServer节点下有个"staticContent"节点,节点里是mime类型列表,这个不是静态内容列表么,IIS对静态对允许的静态内容不是直接下载的么,那JSON文件也应该像JS文件一样直接下载的。在对于js类型文件后面增加一个对于json文件的配置:

    <staticContent lockAttributes="isDocFooterFileName">
        <!--新增的-->    
        <mimeMap fileExtension=".json" mimeType="application/javascript" />
        <!--已有的-->
        <mimeMap fileExtension=".js" mimeType="application/javascript" />
    </staticContent>

      再验证下这种方式是否有效,嘿嘿i额,居然成功了,那就说明此方法有效。

    总结

      总结一下,对于这个问题,目前我已找到三种解决方法:

      1)将json文件修改为js文件;

      2)修改IIS Express配置文件,在配置节location>system.webServer>handlers下添加对json文件的处理节点:

        <add name="Json" path="*.json" verb="GET,HEAD,POST" modules="IsapiModule" scriptProcessor="%IIS_BIN%asp.dll" resourceType="File" />;

      3)修改IIS Express配置文件,在配置节system.webServer>staticContent下添加json类型文件作为静态文件处理:

        <mimeMap fileExtension=".json" mimeType="application/javascript" />

    参考

      1)http://www.cnblogs.com/lvduanbing/p/3325921.html

      2)http://www.iis.net/learn/extensions/introduction-to-iis-express

  • 相关阅读:
    第三章 第六节 SWT类的常量与函数
    第四章 第一节 概述
    第四章 第四节 使用RowLayout
    第四章 第三节 使用FillLayout
    IIS7下使用4.0框架集成模式URLRewriter重写中文URL乱码问题
    Google Chrome下无法获取标签innerHTML问题
    IIS7.5应用程序池集成模式和经典模式的区别
    IIS使用4.0框架时Request.RawUrl获取问题
    解决iOS与pad里ifram无法滑动问题
    react实现双向绑定
  • 原文地址:https://www.cnblogs.com/zYier/p/iis-express-support-json-file.html
Copyright © 2020-2023  润新知