J'ai un projet qui nécessite que mes URL aient des points sur le chemin. Par exemple, je peux avoir une URL telle que www.example.com/people/michael.phelps
Les URL avec le point génèrent un 404. Mon routage est très bien. Si je passe à michaelphelps, sans le point, alors tout fonctionne. Si j'ajoute le point, j'obtiens une erreur 404. L'exemple de site s'exécute sur Windows 7 avec IIS8 Express. URLScan n'est pas en cours d'exécution.
J'ai essayé d'ajouter ce qui suit à mon web.config:
<security>
<requestFiltering allowDoubleEscaping="true"/>
</security>
Malheureusement, cela n'a fait aucune différence. Je viens de recevoir une erreur 404.0 Not Found.
Il s'agit d'un projet MVC4 mais je ne pense pas que ce soit pertinent. Mon routage fonctionne bien et les paramètres que j'attends sont là, jusqu'à ce qu'ils incluent un point.
Que dois-je configurer pour pouvoir avoir des points dans mon URL?
la source
Réponses:
J'ai réussi à le faire en modifiant les gestionnaires HTTP de mon site. Pour mes besoins, cela fonctionne bien et résout mon problème.
J'ai simplement ajouté un nouveau gestionnaire HTTP qui recherche des critères de chemin d'accès spécifiques. Si la demande correspond, elle est correctement envoyée à .NET pour traitement. Je suis beaucoup plus heureux avec cette solution que l'URLRewrite pirate ou active RAMMFAR.
Par exemple, pour que .NET traite l'URL www.example.com/people/michael.phelps, ajoutez la ligne suivante au web.config de votre site dans l'
system.webServer / handlers
élément:Éditer
Il existe d'autres articles suggérant que la solution à ce problème est
RAMMFAR
ouRunAllManagedModulesForAllRequests
. L'activation de cette option activera tous les modules gérés pour toutes les demandes. Cela signifie que les fichiers statiques tels que les images, les fichiers PDF et tout le reste seront traités par .NET lorsqu'ils ne doivent pas l'être. Il vaut mieux laisser cette option à moins que vous ayez un cas spécifique pour cela.la source
Après quelques fouilles, j'ai trouvé que relaxUrlToFileSystemMapping ne fonctionnait pas du tout pour moi, ce qui fonctionnait dans mon cas était de définir RAMMFAR sur true, la même chose est valable pour (.net 4.0 + mvc3) et (.net 4.5 + mvc4).
Soyez conscient lorsque vous définissez RAMMFAR true Hanselman post sur RAMMFAR et ses performances
la source
Je crois que vous devez définir la propriété relaxUrlToFileSystemMapping dans votre web.config. Haack a écrit un article à ce sujet il y a peu de temps (et il y a d'autres articles SO posant le même type de question)
Modifier D'après les commentaires ci-dessous, les versions ultérieures de .NET / IIS peuvent nécessiter que cela soit dans l'
system.WebServer
élément.la source
Je suis resté coincé sur cette question pendant longtemps en suivant tous les différents remèdes en vain.
J'ai remarqué que lors de l'ajout d'une barre oblique [/] à la fin de l'URL contenant les points [.], Cela n'a pas généré d'erreur 404 et cela a réellement fonctionné.
J'ai finalement résolu le problème en utilisant un réécriveur d'URL comme IIS URL Rewrite pour surveiller un modèle particulier et ajouter la barre oblique de formation.
Mon URL ressemble à ceci: /Contact/~firstname.lastname donc mon modèle est tout simplement: /Contact/~(.*[^/[)$
J'ai eu cette idée de Scott Forsyth, voir le lien ci-dessous: http://weblogs.asp.net/owscott/handing-mvc-paths-with-dots-in-the-path
la source
Ajoutez simplement cette section à Web.config, et toutes les demandes à la route / {* pathInfo} seront traitées par le gestionnaire spécifié, même s'il y a des points dans pathInfo. (extrait de l'exemple Web.config de l'hôte ServiceStack MVC et de cette réponse https://stackoverflow.com/a/12151501/801189 )
Cela devrait fonctionner pour IIS 6 et 7. Vous pouvez affecter des gestionnaires spécifiques à différents chemins après la «route» en modifiant path = "*" dans les éléments «add»
la source
Solution de contournement MVC 5.0.
La plupart des réponses suggérées ne semblent pas fonctionner dans MVC 5.0.
Comme le problème des 404 points dans la dernière section peut être résolu en fermant cette section avec une barre oblique, voici le petit truc que j'utilise, propre et simple.
Tout en gardant un espace réservé pratique à votre avis:
ajoutez un peu de jquery / javascript pour faire le travail:
veuillez noter la barre oblique de fin, qui est responsable du changement
dans
la source
Réponse super simple pour ceux qui ne l'ont que sur une seule page Web. Modifiez votre lien d'action et un + "/" à la fin de celui-ci.
la source
Vous voudrez peut-être penser à utiliser des tirets au lieu de points.
Dans Pro ASP MVC 3 Framework, ils suggèrent de créer des URL conviviales:
Il mentionne également que les URL doivent être faciles à lire et à modifier pour les humains. Peut-être une raison de penser à utiliser un tiret au lieu d'un point vient également du même livre:
Donc, même si une période est toujours lisible par les humains (bien que moins lisible que les tirets, IMO), elle peut toujours être un peu déroutante / trompeuse selon ce qui vient après la période. Et si quelqu'un a un nom de famille de zip? L'URL sera alors /John.zip au lieu de / John-zip, ce qui peut être trompeur même pour le développeur qui a écrit l'application.
la source
.
) par des tirets dans ses URL utilisateur: PSelon l'importance pour vous de conserver votre URI sans chaîne de requête, vous pouvez également simplement passer la valeur avec des points dans le cadre de la chaîne de requête, pas l'URI.
Par exemple, www.example.com/people?name=michael.phelps fonctionnera, sans avoir à modifier les paramètres ou quoi que ce soit.
Vous perdez l'élégance d'avoir un URI propre, mais cette solution ne nécessite pas de modifier ou d'ajouter des paramètres ou des gestionnaires.
la source
Serait-il possible de modifier la structure de votre URL?
Pour ce que je travaillais, j'ai essayé un itinéraire pour
mais il a échoué avec tout ce qui avait un. en elle.
J'ai changé de route pour
Maintenant, je peux mettre
localhost:xxxxx/File1.doc/Download
et ça fonctionne bien.Mes assistants dans la vue l'ont également remarqué
qui fait également un lien vers le
localhost:xxxxx/File1.doc/Download
format.Vous pourriez peut-être mettre un mot inutile comme "/ vue" ou une action à la fin de votre itinéraire afin que votre propriété puisse se terminer par
/
quelque chose comme/mike.smith/view
la source
C'est aussi simple que de changer path = " ." à path = " ". Supprimez simplement le point dans le chemin pour ExensionlessUrlHandler-Integrated-4.0 dans web.config.
Voici un bel article https://weblog.west-wind.com/posts/2015/Nov/13/Serving-URLs-with-File-Extensions-in-an-ASPNET-MVC-Application
la source
J'ai essayé toutes les solutions ci-dessus, mais aucune n'a fonctionné pour moi. Ce qui a fonctionné, c'est que j'ai désinstallé les versions .NET> 4.5, y compris toutes ses versions multilingues; Finalement, j'ai ajouté des versions plus récentes (en anglais uniquement) pièce par pièce. À l'heure actuelle, les versions installées sur mon système sont les suivantes:
Et ça fonctionne toujours à ce stade. J'ai peur d'installer 4.6.2 car cela pourrait tout gâcher.
Je ne pouvais donc que spéculer que la version 4.6.2 ou toutes ces versions non anglaises perturbaient ma configuration.
la source
J'ai pu résoudre ma version particulière de ce problème (j'ai dû faire le chemin /customer.html vers / client, les barres obliques de fin ne sont pas autorisées) en utilisant la solution à https://stackoverflow.com/a/13082446/1454265 et en remplaçant le chemin = "*. html".
la source
Comme solution, on pourrait également envisager de coder dans un format qui ne contient pas de symbole
.
, comme base64.Dans js doit être ajouté
Dans le contrôleur
la source
Ajoutez la règle de réécriture d'URL à l'archive Web.config. Vous devez avoir le module de réécriture d'URL déjà installé dans IIS. Utilisez la règle de réécriture suivante comme source d'inspiration pour la vôtre.
la source
Vérifiez également (en rapport) l'ordre de vos mappages de gestionnaires. Nous avions un .ashx avec un .svc (par exemple /foo.asmx/bar.svc/path) dans le chemin suivant. Le mappage .svc était d'abord 404 pour le chemin .svc qui correspondait avant le .asmx. Je n'ai pas trop réfléchi mais peut-être que l'URL encodant le chemin s'en occuperait.
la source
la source