2009-11-16 6 views
0

Application .NET 3.5 écrite en C# ici avec jQuery et un peu d'ASP.NET AJAX UpdatePanel. Je suis confronté à un problème intéressant. J'ai créé un contrôle utilisateur de pagination composé de LinkButtons. Le contrôle utilisateur déclenche un événement appelé CurrentPageChanged chaque fois qu'un internaute clique sur une page, un bouton précédent, le premier ou le suivant. La page utilisant ce contrôle de pagination est alors responsable de l'obtention du nouvel ensemble d'enregistrements basé sur l'élément de contrôle de pagination cliqué.Trailing slash dans URL provoquant des problèmes de retour partiel

Maintenant, le problème que je rencontre est celui-ci: Si j'ai une URL comme ceci: http://localhost:2798/user/9794/profile, tout fonctionne bien. Toutefois, si j'ai un URL avec la barre oblique finale (c'est-à-dire http://localhost:2798/user/9794/profile/), mon UpdatePanel tombe sur son visage avec une erreur 405.

L'exception en question est la suivante:

[Exception] Sys.WebForms.PageRequestManagerServerErrorException: Sys.WebForms.PageRequestManagerServerErrorException: Une erreur inconnue est survenue lors du traitement de la demande sur le serveur. Le code d'état renvoyé par le serveur était: 405

Maintenant, je regardais les demandes via les outils de développement de Chrome, et je vois qu'il a demandé cette URL: http://localhost:2798/user/9794/profile/profile. Il semble que s'il y a une barre oblique, un chemin supplémentaire sera ajouté.

Des idées comment je peux contourner cela?

+0

Avez-vous déjà résolu ce problème? ik AjaxManager. – eidylon

Répondre

1

Il semble qu'il y ait une barre oblique de fin, cela ajoute un chemin supplémentaire.

Oui, c'est ainsi que fonctionnent les URL relatives. Un navigateur utilise la barre oblique finale pour décider si l'URL fait référence à un dossier (auquel cas une URL peut renvoyer à un autre fichier dans ce dossier) ou un fichier (dans ce cas, il doit rechercher le dossier parent). Donc <a href="profile"> à l'intérieur de l'URL de fin de ligne pointera en effet à .../profile/profile.

Des idées comment je peux contourner ce problème?

Utilisez des URL absolues (ou, mieux encore, les URL relatifs à la racine comme href="/user/9794/profile" partout où vous faites un lien (soit explicitement ou via un contrôle ASP.NET). Les URL relatives sont incompatibles avec le style « déroute » de l'URL où vous pouvez avoir un nombre variable de bits de données séparés par une barre oblique dans l'URL

Et/ou d'utiliser uniquement des URL canoniques, afin que l'URL d'une ressource donnée soit toujours fixe, si vous passez à la "mauvaise" version avec une barre oblique ou d'autres éléments redondants dans l'URL, vous obtenez une redirection 301 vers la «bonne» version

+0

FWIW, j'utilise les URL relatives à la racine: /user/userID/profile J'essaie juste de gérer le slash final. Aucun de ces liens n'est relatif. – StephenPAdams

+0

Peut-on voir le code qui se passe sur CurrentPageChanged? Clairement, il a ramassé une URL relative 'profile' de * quelque part *. – bobince

+0

Un fichier par défaut configuré dans IIS peut-il être un profil? (au lieu de mapper ~/to ~/default.aspx, il est mappé à ~/profile par exemple) –