Json 部署到Azure时Angular 2应用程序上出现错误404

Json 部署到Azure时Angular 2应用程序上出现错误404,json,angular,azure,http-status-code-404,mime,Json,Angular,Azure,Http Status Code 404,Mime,我有一个angular 2应用程序,它有一个简单的server.js作为node.js 我已经将我的应用程序部署到Azure,我已经到了应用程序加载并显示欢迎页面的时候了 当我到达一个试图通过HTTP请求读取本地JSON的组件时,我得到一个404错误(我在本地环境中没有收到) 读取json的代码如下所示: private ReadFromJson(path: string): Observable<string[]> { return this._http.get(path)

我有一个angular 2应用程序,它有一个简单的server.js作为node.js

我已经将我的应用程序部署到Azure,我已经到了应用程序加载并显示欢迎页面的时候了

当我到达一个试图通过HTTP请求读取本地JSON的组件时,我得到一个404错误(我在本地环境中没有收到)

读取json的代码如下所示:

private ReadFromJson(path: string): Observable<string[]> {
    return this._http.get(path)
        .map((response: Response) => <string[]>response.json())
        .do(data => console.log('All: ' + JSON.stringify(data)))
        .catch(this.handleError);
}
private ReadFromJson(路径:字符串):可观察{
返回此。\u http.get(路径)
.map((response:response)=>response.json())
.do(data=>console.log('All:'+JSON.stringify(data)))
.接住(这个.把手错误);
}
其中实际传递的路径是控制台中显示的路径

我做了两件事:首先,我使用Azure CLI确保文件确实在那里,并且正如预期的那样在那里

其次,在查看了很多帖子之后,我发现唯一的解决方案是按照建议添加MIME类型,但这对我来说并不管用

我真的希望在理解和排除问题上得到一些帮助,欢迎任何建议

更新: 如果您的应用程序只是前端(Angular)应用程序,那么您不再需要通过Node.js为这些静态文件提供服务。因为默认情况下,Azure应用程序服务在其上安装了IIS,并且IIS可以通过进行一些配置来服务于任何文件类型。因此,在本例中,您可以保持
web.config
如下所示,并将其放在“site/wwwroot/dist”中

因此,在您将其添加到web.config之后

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

请确保静态文件已放入
/public
文件中


上周我遇到了同样的问题,我想也许我应该分享我的发现,因为我让它按预期工作

我部署了使用angular cli开发的应用程序,并使用相同的方法构建。我将/dist文件夹中的所有文件复制到azure并添加了一个web.config(这是大量的尝试和尝试),但我了解到angular需要一个重写规则,它可以处理web包捆绑资产,而不返回404

这是web,配置,我相信它应该适合您:


下面的建议创造了奇迹

如果您的应用程序只是前端(Angular)应用程序,那么您不再需要通过Node.js为这些静态文件提供服务。因为默认情况下,Azure应用程序服务在其上安装了IIS,并且IIS可以通过进行一些配置来服务于任何文件类型。因此,在本例中,您可以保持web.config如下所示,并将其放在“site/wwwroot/dist”中

添加web.config有效


感谢您提供了出色的解决方案。

谢谢您的回答!我怀疑这是根本原因。My web.config与您的web.config类似(带有突出显示的两个部分)。我的根文件夹在Azure中配置为“site\wwwroot\dist”。在我的根文件夹中,我打开了一个名为“public”的文件夹,并将所有文件复制到该位置。我还确保在构建angular时将此文件夹部署到“dist”文件夹。但是,当我尝试以与您类似的方式访问我的站点时,我遇到了一个错误(“您正在查找的资源已被删除、名称已更改或暂时不可用。”)。我已尝试了和。我认为这可能与定义的应用程序根有关,您认为如何?如何设置静态目录
/assets/images
?您应该对
/public
执行相同的操作。我没有设置任何内容,请以任何方式定义该文件夹。。我所做的唯一一件事就是将该文件夹部署到dist文件夹中,这是在我构建angular时完成的,需要显式配置。我还将公用文件夹部署到了我的dist文件夹中。解决这个问题的一个有趣方法是:我将一个png文件复制到json所在的文件夹中,我可以(在浏览器中)导航到png url并访问它(图像显示在屏幕上),但当我访问json时,会出现错误。这意味着问题不在于文件夹不是公共的,而在于json文件的特定内容是JSONTANKS!它会试试这个。您对.json文件也有问题吗?我注意到您也没有mime映射。不,我没有遇到任何问题,因为我没有json文件提供服务。但是,如果您只是在上面的文件中添加和。由于您有一个不同的文件夹提供文件,我想您可能需要在规则中设置正确的重写路径,例如url=“/dist”etc@Belgi-你有没有尝试过itI添加了json mime类型和删除的部分,我还按照你的建议将url编辑为/dist,但不幸的是,仍然存在同样的错误
<!-- First we consider whether the incoming URL matches a physical file in the /public folder -->
<rule name="StaticContent">
    <action type="Rewrite" url="public{REQUEST_URI}" />
</rule>
<staticContent>
    <remove fileExtension=".json" />
    <mimeMap fileExtension=".json" mimeType="application/json" />
</staticContent>