J'utilise le plugin de commentaires Facebook sur un blog que je crée. Il a des balises FBXML qui sont interprétées par le javascript facebook référencé sur la page.
Tout cela fonctionne bien, mais je dois transmettre l'URL actuelle et complète au plugin.
<div style="width: 900px; margin: auto;">
<div id="fb-root"></div>
<fb:comments href="URL HERE" num_posts="10" width="900"></fb:comments>
</div>
Quelle est la meilleure façon d'obtenir l'URL de la page actuelle? L'URL de la demande.
Solution
Voici le code final de ma solution:
<fb:comments href="@Request.Url.AbsoluteUri" num_posts="15" width="900"></fb:comments>
c#
asp.net
asp.net-mvc
razor
Chev
la source
la source
Request.Url.ToString()
ouRequest.Url.AbsoluteUri
?Request.Url.AbsoluteUri
l'a fait :)Ajoutez cette méthode d'extension à votre code:
Et puis vous pouvez l'exécuter sur la
RequestContext.HttpContext.Request
propriété.Il y a un bogue (peut être contourné, voir ci-dessous) dans Asp.Net qui se produit sur les machines qui utilisent des ports autres que le port 80 pour le site Web local (un gros problème si les sites Web internes sont publiés via l'équilibrage de charge sur IP virtuelle et les ports sont utilisés en interne pour les règles de publication), où Asp.Net ajoutera toujours le port sur la
AbsoluteUri
propriété - même si la requête d'origine ne l'utilise pas.Ce code garantit que l'URL renvoyée est toujours égale à l'URL que le navigateur a initialement demandée (y compris le port - car il serait inclus dans l'en-tête de l'hôte) avant tout équilibrage de charge, etc.
Au moins, c'est le cas dans notre environnement (plutôt alambiqué!) :)
S'il y a des procurations géniales entre les deux qui réécrivent l'en-tête de l'hôte, cela ne fonctionnera pas non plus.
Mise à jour du 30 juillet 2013
Comme mentionné par @KevinJones dans les commentaires ci-dessous - le paramètre que je mentionne dans la section suivante a été documenté ici: http://msdn.microsoft.com/en-us/library/hh975440.aspx
Même si je dois dire que je ne pouvais pas le faire fonctionner quand je l'ai essayé - mais cela pourrait simplement être moi qui fais une faute de frappe ou quelque chose.
Mise à jour du 9 juillet 2012
Je suis tombé sur cela il y a un petit moment et je voulais mettre à jour cette réponse, mais je ne l'ai jamais fait. Quand un vote positif est venu sur cette réponse, j'ai pensé que je devais le faire maintenant.
Le «bug» que je mentionne dans Asp.Net peut être contrôlé avec une valeur appSettings apparemment non documentée - appelée
'aspnet:UseHostHeaderForRequest'
- c'est-à-dire:Je suis tombé sur cela en regardant
HttpRequest.Url
dans ILSpy - indiqué par le--->
côté gauche du copier / coller suivant de cette vue ILSpy:Personnellement, je ne l'ai pas utilisé - il n'est pas documenté et donc pas garanti de rester - mais il pourrait faire la même chose que je mentionne ci-dessus. Pour augmenter la pertinence des résultats de recherche - et pour reconnaître quelqu'un d'autre qui semble avoir découvert cela - le
'aspnet:UseHostHeaderForRequest'
paramètre a également été mentionné par Nick Aceves sur Twitterla source
la source
devrait fonctionner parfaitement, surtout si vous ne voulez que l'URI relatif (mais en gardant les chaînes de requête)
la source
Moi aussi, je cherchais cela pour des raisons Facebook et aucune des réponses fournies jusqu'à présent ne fonctionnait comme nécessaire ou n'était trop compliquée.
Obtient le protocole complet, l'hôte et le chemin d'accès "sans" la chaîne de requête. Inclut également le port si vous utilisez autre chose que le 80 par défaut.
la source
Mon préféré...
ou juste...
la source
Une chose qui n'est pas mentionnée dans les autres réponses est la sensibilité à la casse, si elle va être référencée à plusieurs endroits (ce qui n'est pas dans la question d'origine mais mérite d'être pris en compte car cette question apparaît dans de nombreuses recherches similaires ). Sur la base d'autres réponses, j'ai trouvé que les éléments suivants ont fonctionné pour moi au départ:
Request.Url.AbsoluteUri.ToString()
Mais pour être plus fiable, cela est devenu:
Request.Url.AbsoluteUri.ToString().ToLower()
Et puis pour mes besoins (vérifier à partir de quel nom de domaine le site est accédé et montrer le contenu pertinent):
Request.Url.AbsoluteUri.ToString().ToLower().Contains("xxxx")
la source
Pour moi, le problème était quand j'ai essayé d'accéder
HTTPContext
au constructeur du contrôleur alors qu'ilHTTPContext
n'était pas encore prêt. Lorsque déplacé à l'intérieur de la méthode Index, cela a fonctionné:la source
Le cas (style de page unique) pour l'historique du navigateur
la source