Angular 2路由器路径在IIS中不起作用

时间:2016-10-20 14:37:57

标签: azure iis angular

我的启动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上有几个类似的问题 - 但我找不到解决方案。

2 个答案:

答案 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;
    }
}