笛里谁知壮士心,沙头空照征人骨。这篇文章主要讲述需要修复在Azure App服务上运行的Angular 2的路由问题相关的知识,希望能为你提供帮助。
我有一个基于Angular 2 "Tour of Heroes" Quick Start的角度2网站。
它在本地运行时工作正常。修复后不再使用本地node_modules(根据快速入门的deployment steps)并部署到Azure Web应用程序,如果我从根URL(“/”)开始,应用程序工作正常。但是,使用Angular路由更改URL(例如“/ home”),如果我对该URL执行F5刷新,则无法加载应用程序。当我这样做时,我得到404:
您要查找的资源已被删除,名称已更改或暂时不可用。我尝试使用web.config描述here,但这没有帮助。它似乎是一个IIS问题,它试图提供一个页面,而不是从index.html开始。我的路线在Angular中定义,它们在本地工作。
答案你可以试试这个web.config文件吗?
<
configuration>
<
system.webServer>
<
rewrite>
<
rules>
<
rule name="AngularJS Routes" stopProcessing="true">
<
match url=".*" />
<
conditions logicalGrouping="MatchAll">
<
add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<
add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<
/conditions>
<
action type="Rewrite" url="/" />
<
/rule>
<
/rules>
<
/rewrite>
<
caching enabled="true" enableKernelCache="true">
<
profiles>
<
add extension=".js" policy="DisableCache" kernelCachePolicy="DisableCache" />
<
/profiles>
<
/caching>
<
/system.webServer>
<
/configuration>
另一答案web.config解决方案对我来说根本不起作用。经过一天左右的挖掘和撕裂我的头发,我遇到this post解决了我的问题。对于与任何/ api /请求无关的404,它似乎做了类似的事情,提供了根页面,因此Angular路由应该启动并提供正确的视图。根据上面的链接,在void Configure()方法开头的Startup.cs中,我插入了以下代码:
app.Use(async (HttpContext context, Func<
Task>
next) =>
{
await next.Invoke();
if (context.Response.StatusCode == 404 &
&
!context.Request.Path.Value.Contains("/api"))
{
context.Request.Path = new PathString("/");
await next.Invoke();
}
});
【需要修复在Azure App服务上运行的Angular 2的路由问题】我做的唯一不同的是将根网址设置为'/'(我的root razor页面托管Angular应用程序)而不是示例中的index.html。我使用的版本是.NET Core 2.2和Angular 7.2.1。
推荐阅读
- Solr Realtime获取RemoteSolrException(预期的mime类型application / xml但是得到了text / html)
- Android双向绑定转换器@InverseMethod不起作用
- 搜索值,然后在Google表格中查找并使用google apps脚本在html中显示行值
- Android Room Database,检索输入的最新记录的特定值
- 如何在global.asax中注册Automapper配置类()
- “(AppContainer)的RangeError(最大调用堆栈大小超过” - 阵营与反应热装载机)
- Android Studio中不同的构建类型使用不同的lint.xml吗()
- 错误(在项目':app'上找不到参数[目录'libs']的方法implimentation())
- 如何在PHP中使用Imagick向图像添加水印