He creado una aplicación angular que debe estar encima de una aplicación .NET. Hay una vista de índice de la aplicación ASP.Net desde la que debo llamar a cierta vista angular.

Para las pruebas, intenté alojar la aplicación localmente con http serve, aquí solo puedo acceder al index.html (que en mi caso no tiene entradas), una ruta como /users para ir a los leads de Descripción general del usuario a un 404.

Aquí está mi módulo de enrutamiento:

const routes: Routes = [
  {path: 'users', component: UsersComponent},
  {path: 'user/new', component: UserNewComponent},
  {path: 'user/edit/:id', component: UserEditComponent}
];

@NgModule({
  declarations: [],
  imports: [
    CommonModule,
    RouterModule.forRoot(routes)
  ],
  exports: [RouterModule]
})
export class AppRoutingModule { }

Sé que debería ser una aplicación de una sola página, pero en este momento, para esa iteración, debería ser así. ¿Como puedo resolver esto?

0
FlixRo 31 oct. 2019 a las 15:18

3 respuestas

La mejor respuesta

La solución fue agregar un web.config con reglas explícitas de reescritura para IIS, así como URL-Rewriter 2.

Config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>

<system.webServer>
  <rewrite>
    <rules>
      <rule name="Angular 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="./index.html" />
      </rule>
    </rules>
  </rewrite>
</system.webServer>

</configuration>
0
FlixRo 14 nov. 2019 a las 13:07

Necesitará un servidor que redirija todas las rutas a index.html. http serve no hará eso.

Internamente, Angular maneja las rutas mediante el uso de algo llamado rutas virtuales.

Por ejemplo:

En Node.js tenemos algo como,

app.get('*', function (req, res) {
  res.sendFile(path.join(frontend_path, 'index.html'));
});

Para fines de desarrollo, puede ejecutar un servidor local utilizando,

ng serve

En el directorio angular de nivel superior

0
Vishnudev 31 oct. 2019 a las 13:08
RouterModule.forRoot(routes, { useHash: true }) 

Pruebe useHash: true en el archivo app.routing. Esto funciona para mi.

1
Hardik Shimpi 31 oct. 2019 a las 12:25