如何允许使用 ASP.NET 下载 .json 文件

Posted

技术标签:

【中文标题】如何允许使用 ASP.NET 下载 .json 文件【英文标题】:How to allow download of .json file with ASP.NET 【发布时间】:2011-12-30 18:53:12 【问题描述】:

如何启用从旧的 ASP.NET 站点(我相信是 IIS6)下载 *.json 文件?

我得到的是 404 页面而不是 JSON 文件。

我需要创建一个 web.config 文件吗?里面有什么?

【问题讨论】:

您可能需要add a MIME type 才能获得它。 用于 javascript 或保存在 hd 上? 我想通过 jQuery.ajax(url:... 访问它 添加,在本地 IIS 有一个列表之后,在您的下一次部署中,它可能会从重复列表中抛出 500 服务器错误,所以然后将其注释掉。 【参考方案1】:

如果您想手动为您的站点添加支持,您只需在 system.webServer 部分的 web.config 中添加以下内容:

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

这将在 IIS 下添加“本地”配置。这在 IIS6 中不起作用,但在 IIS7 和更高版本中起作用。

【讨论】:

更新了您的答案以包含完整的web.config 路径。 救命稻草,谢谢:) 出于某种原因,这搞砸了我的整个网站 - css 不再工作! @TheJeff -- 这发生在我身上,但这是因为我添加了两个 staticContent mimeMap,一个用于 JSON(必要),一个用于 CSV(冗余,我认为这是必要的,但 IISExpress applicationConfig 已经有 CSV)。因此,每当我尝试访问任何静态文件时,都会出现此错误:Cannot add duplicate collection entry of type 'mimeMap' with unique key attribute 'fileExtension' set to '.csv' 一旦我删除了副本,就没有问题了。 这会解决本地运行时的问题,但在直播时要注意。如果 mimeMap 已在 IIS 中全局配置,您将收到 500 错误。在这种情况下,只需从您的 web.config 中删除这部分即可。【参考方案2】:

将 JSON MIME 类型添加到 IIS 6。按照MSDN's Configure MIME Types (IIS 6.0) 的说明进行操作。

扩展名:.json MIME 类型:application/json

更改后不要忘记重新启动 IIS。

更新:在 IIS7 和更新版本上,有一些简单的方法可以做到这一点。该操作专门要求 IIS6 帮助,因此我将按原样保留此答案。但是,即使 IIS6 现在已经很老了,这个答案仍然有很多流量。希望您使用的是更新的东西,所以我想提一下,如果您有更新的 IIS7 或更新的版本,请参阅下面的@ProVega 的答案,以获得这些更新版本的更简单的解决方案。

【讨论】:

干杯,但这是在共享主机包上,无法访问除 web.config 或全局代码文件以外的任何内容 如果您无权访问 IIS 6.0 设置,并且您的提供商的支持不会为您添加 MIME 类型,那么您将不得不切换提供商,或者切换到启用 IIS 7.0 的较新服务器该提供商(如果他们提供)来支持这一点。 是的,ASP.Net 可以通过 ASPX 处理程序甚至简单的页面传递文件,但是您将无法在 URL 中使用 .json 文件类型,因为它不会将该请求传递给 ASP.Net 运行时。它必须是通过 ASPX 运行时的东西。如果您无权访问 IIS 设置,则它必须是现有扩展之一,例如 .ASPX。同样,切换到具有 IIS7 的服务器提供了更多、更简单的解决方案。 重启应用程序池就足够了(在我的情况下),而不是完全重启 IIS。 @kltft 是的,重新启动应用程序池将触发更新,但当然仅限于该池。这些步骤包括为每个人更改设置,而让他们处于不一致的设置级别很容易在以后导致混乱。为了安全和健全,我建议重新启动整个 iis 进程。但在紧要关头,如果每个人都同意利弊,重新启动应用程序池可能会奏效。【参考方案3】:

解决方法是你需要在 MIME Types 中添加 json 文件扩展类型

方法一

转到 IIS,选择您的应用程序并查找 MIME 类型

从右侧面板点击添加

文件扩展名 = .json

MIME 类型 = 应用程序/json

MIME Types中添加.json文件类型后,重启IIS并尝试访问json文件


方法二

转到该应用程序的 web.config 并在其中添加此行

 <system.webServer>
   <staticContent>
     <mimeMap fileExtension=".json" mimeType="application/json" />
   </staticContent>
 </system.webServer>

【讨论】:

【参考方案4】:

当添加对 mimetype 的支持时(如 @ProVega 所建议的那样),最好在添加之前删除类型 - 这是为了防止在部署到已经支持该类型的服务器时出现意外错误,例如:

<staticContent>
    <remove fileExtension=".json" />
    <mimeMap fileExtension=".json" mimeType="application/json" />
</staticContent>

【讨论】:

当你只添加mimeMap时,有时它会删除你的css样式,所以,正确的方法是先删除它,非常感谢 IIS7 中配置文件的路径C:\Windows\System32\inetsrv\config 文件:applicationHost.config【参考方案5】:

刚遇到这个问题,但必须找到 IIS Express 的配置,以便我可以添加 mime 类型。对我来说,它位于C:\Users\&lt;username&gt;\Documents\IISExpress\config\applicationhost.config,我可以在那里添加正确的“mime map”。

【讨论】:

这可能就是为什么它不能通过 IIS Express 为我工作。不幸的是,这不是我想要在每台开发机器上配置的东西,所以看起来我建议坚持使用 .js 扩展名作为 json 配置文件。 您也可以在 Web.Config 中进行 - 看看这个答案***.com/a/19517275/643761 @SimchaKhabinsky 对我来说,web.config 还不够。 如果 web.config 不够用,可能需要在 &lt;mimeMap&gt; 节点之前添加这一行:&lt;remove fileExtension=".json" /&gt;。您不必触摸 applicationhost.config(或 machine.config)。话虽如此,如果您经常创建新站点并且不想修改每个站点的 web.config,那么修改这些文件可能会很有用。这可能适用于开发环境,但通常您无法在生产环境中触摸 machine.config,因此我仍然建议在 web.config 中进行更改。 谢谢@gilly3 - remove 是我的关键【参考方案6】:
    导航到 C:\Users\username\Documents\IISExpress\config 使用 Visual Studio 或您喜欢的文本编辑器打开 applicationhost.config。 搜索 mimeMap 这个词,你应该会找到很多。 将以下行添加到列表顶部:.

【讨论】:

以上是关于如何允许使用 ASP.NET 下载 .json 文件的主要内容,如果未能解决你的问题,请参考以下文章

[ASP.NET][C#]下载文件时中文文件名出现乱码

如何使用 json 将复杂类型传递给 ASP.NET MVC 控制器

如何使用 MongoDB 将动态 JSON 属性发布到 C# ASP.Net Core Web API?

asp.net mvc中的Html.TextAreaFor

如何设置 katana-project 以允许 json 格式的令牌请求?

asp.net 如何转化json数据为对象