3 votes

Redirection d'URL IIS sur une sous-application contenant une application SPA React

J'ai un ASP.Net MVC existant hébergé dans IIS qui est étendu / remplacé en utilisant un SPA réactif qui doit être placé sous le site dans IIS dans une application.

Cela a été fait car il existe de nombreuses instances déployées pour plusieurs clients qui ne peuvent pas être segmentées pour des raisons commerciales et le système existant est en web-forms et en raison de sa construction, il n'y a pas de désir d'ajouter le SPA au projet, il a été décidé que la sous-application serait le moyen le plus facile de déployer la nouvelle fonctionnalité - ne voulait pas d'un autre projet MVC ou rendre le projet WebApi serveur les pages statiques en raison d'autres personnalisations liées au client qui doivent être prises en compte.

Le SPA communique avec un nouveau backend WebApi qui est lui-même une application sous l'application réactif.

Pour aider à visualiser, cela ressemble à ceci :

IIS Manager snip

Maintenant, tout cela fonctionne, le SPA peut être chargé depuis l'application parent simplement par un href normal et le SPA communique joyeusement avec le backend WebApi.

Où j'ai rencontré un mur est de trier la règle de réécriture d'URL IIS afin que si l'utilisateur appuie sur F5 dans le SPA, IIS renverra le index.html du SPA, puis le routage côté client (react router v4) se chargera de rendre les composants corrects.

La règle de réécriture d'URL est définie dans l'application v5.

J'ai suivi les conseils sur des questions comme celle-ci et celle-ci et si le SPA réactif est à la racine du site, tout fonctionne parfaitement, mais dès que je passe à la sous-application, je reçois toujours une réponse 404 qui indique que l'URL complète ne peut pas être trouvée, par exemple lors de la demande d'URL localhost/v5/documents IIS tente de trouver un fichier/répertoire v5/documents qui n'existe pas.

Pour sortir le système existant de l'équation, j'ai déployé le site dans un nouveau dossier où le site de niveau supérieur n'a pas de contenu et le site réactif est dans l'application v5 et le webapi dans le dossier api - encore une fois tout fonctionne.

J'ai essayé plusieurs modèles pour la correspondance, le modèle actuel que j'utilise est .*/v5/?.* que le fonctionnement du modèle de test dans le gestionnaire IIS me dit correspond aux URL que j'attends par exemple l'URL de localhost/v5/documents devrait correspondre mais en pratique ne le fait jamais.

J'ai trouvé ce lien sur la configuration angulaire et ce post de Rick Strahl qui aborde la création des règles mais sans succès.

La configuration complète que j'utilise en ce moment est

J'ai également installé le suivi des requêtes échouées, mais quand je regarde les journaux, je ne vois pas la réécriture d'URL être déclenchée pour la demande, c'est pourquoi elle essaie ensuite de trouver le fichier/répertoire inexistant.

J'ai téléchargé le journal du suivi des requêtes échouées ici

J'utilise IIS 10.0.15063.0 sur Windows 10, le site réactif a été créé avec create-react-app (je teste en utilisant une compilation de production et non webpackdevserver) et le projet WebApi est en .Net Framework 4.7

0voto

J. Campbell Points 171

J'ai simplement reproduit votre scénario de la manière la plus simple que je pouvais penser.

J'ai créé un site web nommé MySite avec deux applications /v5 et /v5/api.

J'ai ajouté ce qui suit dans le web.config pour l'application v5, donc le web.config était dans le répertoire racine de v5

L'URL de la règle correspond à tout ce qui se trouve sous l'application v5. Les conditions sont utilisées pour reculer si la cible est un fichier, un répertoire ou quoi que ce soit dans l'application api.

Le nom d'hôte n'est pas nécessaire dans l'action de réécriture.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X