我的启动Angular2组件有一个路由表
@RouteConfig([
{ path: '/welcome', name: 'Welcome', component: WelcomeComponent, useAsDefault: true },
{ path: '/search', name: 'Search', component: SearchComponent },
{ path: '/confirm', name: 'Confirm', component: ConfirmComponent },
{ path: '/office', name: 'Office', component: OfficeComponent }
])
SPA index.html中有一个<base href="/">
,整个应用程序在从节点精简版提供时效果很好。
我现在正在Azure上的IIS上运行它,并将它与路由分开。根默认路由有效 - 但所有其他导航都失败了404。
我使用[routerLink]="['Search']"
作为我的链接。
在S / O上有几个类似的问题 - 但我找不到解决方案。
答案 0 :(得分:0)
将[RouterLink]指令添加到根应用程序组件并确保在标记中使用[routerLink]的所有链接已修复该问题。我也是Angular 2的旧版本,可能没什么帮助。
答案 1 :(得分:0)
Angular 2路由(使用哈希)在IIS上没有任何问题。只需创建默认的网址重写规则,该规则会将所有请求重定向到您的角应用的index.html文件。规则会将所有请求重定向到index.html,但必需的js文件和实际的角度应用网址除外(即index.html或index.html#/ {route-value}。
EX:&lt; rules&gt; &lt; rule name =&#34;默认&#34;&gt; &lt; match url =&#34;(。*)。js | index.html(。*)&#34;否定=&#34;真&#34; /&GT; &lt; action type =&#34;重写&#34; URL =&#34; /index.html" /&GT; &LT; /规则&GT; &LT; /规则&GT;
Angular 2路由(没有哈希)不适用于IIS。在纯HTML应用程序的情况下,IIS将路由传入请求,如果该位置不存在,则它会将请求重定向到错误页面。
如果是.Net MVC应用程序,您可以创建一个默认路由来处理所有传入的请求URL并将其重定向到您的角度索引视图。
MVC申请的前路:
routes.MapRoute(
name: "Angular",
url: "{*url}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
constraints: new { url = new AppFeatureUrlConstraint() }
public class AppFeatureUrlConstraint : IRouteConstraint
{
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
if (values[parameterName] != null)
{
var url = values[parameterName].ToString();
if (url.StartsWith("angular/", StringComparison.InvariantCultureIgnoreCase))
return true;
else
return false;
}
return false;
}
}