2016-01-06 1 views
2

Je développe une application d'une seule page en utilisant angularJS (client) et mvc web api (serveur). J'ai deux page physique d'abord Login.html et deuxième Index.html lorsque l'utilisateur se connecte avec succès aux redirections vers Index.html et d'autres parties de mon application se chargent dynamiquement en div signé avec ng-view à l'intérieur de la page Index.html et j'utilise AngularJS $routeProvider pour configurer mes itinéraires avec leurs modèles et contrôleurs associés. J'ai récemment enlevé la balise de hachage de l'URL en utilisant $locationProvider.html5Mode(true); et en ajoutant <base href="/Index.html"> à la section principale de la page Index.html.J'ai un itinéraire qui prend un paramètre dynamique comme si Index.html/MetaDetails/123456 quand je vais à cette page pour la première fois que tout va bien, mais quand rafraîchir le Je reçois la page iis erreur 404Erreur iis 404 lors de la suppression de l'étiquette de hachage de l'application url angularjs

voici ma configuration itinéraire à l'aide $routeProvider

App.config(function ($routeProvider, $locationProvider) { 
$routeProvider 
.when('/Index.html', { 
    templateUrl: 'View/HomePage.html' 
}) 
    .when('/MetaDetails/:url', { 
     templateUrl: 'View/MetaDetails/MetaDetails.html' 
    }).when('/Logout', { 
     templateUrl: 'View/Users/logout.html', 
     controller: 'LogoutController' 
    }).when('/MetaCRUD', { 
     templateUrl: 'View/MetaDetails/MetaCRUD.html', 
     typeTemplate:'insert', 
     controller: 'MetaCRUDController' 
    }).when('/MetaCRUD/:url', { 
     templateUrl: 'View/MetaDetails/MetaCRUD.html', 
     typeTemplate: 'update', 
     controller: 'MetaCRUDController' 
    }).when('/MetaReport', { 
     templateUrl: 'View/Report/MasterReport.html', 
     controller: 'reportController' 
    }) 
    .when('/404', { 
     templateUrl: 'View/ErrorPage.html', 

    }) 
    .otherwise({ 

     redirectTo: '/404' 
    }); 

$locationProvider.html5Mode(true); 

});

Je sais ce qui se passe parce qu'il est en conflit avec le routage iis et connaît ma route comme une véritable page physique si la solution la plus probable serait url rewriting j'utilisé suivant la règle de réécriture

<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" /> 
     <add input="{REQUEST_URI}" pattern="^/(api)" negate="true" /> 
     </conditions> 
     <action type="Rewrite" url="/" /> 
    </rule> 
    </rules> 

Mise à jour 2:

puis quand j'actualise ou redirige depuis une autre URL ma route ne change pas mais Index.html est montré sans css et js les réfrences incluses (totalement dévastées) comme si elle n'avait pas de css et js et c'est essentiellement parce qu'elle essaye de lire les ressources de host/metadetails/example.css ou host/metade tails/example.js au lieu de host/example.js comment cela se fait-il et comment puis-je le faire obtenir des ressources de racine pas/chemin métadétaux

que pensez-vous serait la solution appropriée (qui serait probablement un Notez que c'est très important pour moi de garder ma structure d'une seule page quand je navigue d'une page à l'autre par exemple de metaCRUD (index.html/MetaCRUD) à désiré MetaDetails (index.html/MetaDetails/someid) Je ne veux pas que ma page soit postée du tout tout comme lorsque j'utilisais l'utilisation de l'étiquette de hachage, que tout allait bien et que seuls les gabarits et les données étaient changés sans pos t retour

Mise à jour 3

je me dis que juste que le problème ne se pose que lorsque ma route a paramètre (index.html/MetaDetails/someid)

comment puis-je réécrire cette URL pour faire iis pas reconnaître par erreur mon paramètre inclus itinéraire comme chemin physique ???

toute aide serait appréciée

+0

s'il vous plaît donnez-moi de l'aide J'ai vraiment besoin –

+0

Salut Avez-vous une solution pour cela – Mohsin

Répondre

0

Il est bien comment tout le monde vous dit comment supprimer le hashtag, mais pas la solution de l'actualisation.

est ici ce qui a fonctionné pour moi:

  1. app.js: ajouter "locationProvider.html5Mode $ (true);" dans app.config en première ligne.
  2. index.html: ajoutez "" dans votre comme la première ligne.
  3. web.config: ajouter ce qui suit à la fin de votre config:

<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" /> 
 
       <add input="{REQUEST_URI}" pattern="^/(api)" negate="true" /> 
 
       </conditions> 
 
       <action type="Rewrite" url="/" /> 
 
      </rule> 
 
      </rules> 
 
     </rewrite> 
 
     </system.webServer>

Cela a fonctionné pour moi. Toutes mes excuses, l'éditeur était un peu morose.