Ich verwende das Facebook-Kommentar-Plugin in einem Blog, das ich gerade erst baue. Es hat einige FBXML-Tags, die von dem Facebook-Javascript interpretiert werden, auf das auf der Seite verwiesen wird.
Das alles funktioniert gut, aber ich muss die aktuelle, vollqualifizierte URL an das Plugin übergeben.
<div style="width: 900px; margin: auto;">
<div id="fb-root"></div>
<fb:comments href="URL HERE" num_posts="10" width="900"></fb:comments>
</div>
Was ist der beste Weg, um die URL der aktuellen Seite zu erhalten? Die Anforderungs-URL.
Lösung
Hier ist der endgültige Code meiner Lösung:
<fb:comments href="@Request.Url.AbsoluteUri" num_posts="15" width="900"></fb:comments>
c#
asp.net
asp.net-mvc
razor
Chev
quelle
quelle
Request.Url.ToString()
oderRequest.Url.AbsoluteUri
?Request.Url.AbsoluteUri
tat es :)Fügen Sie diese Erweiterungsmethode Ihrem Code hinzu:
Und dann können Sie es von der
RequestContext.HttpContext.Request
Eigenschaft ausführen .In Asp.Net gibt es einen Fehler (kann umgangen werden, siehe unten), der auf Computern auftritt, die andere Ports als Port 80 für die lokale Website verwenden (ein großes Problem, wenn interne Websites über Load Balancing auf virtueller IP veröffentlicht werden und Ports werden intern für Veröffentlichungsregeln verwendet), wobei Asp.Net den Port immer zur
AbsoluteUri
Eigenschaft hinzufügt - auch wenn die ursprüngliche Anforderung ihn nicht verwendet.Dieser Code stellt sicher, dass die zurückgegebene URL immer der URL entspricht, die der Browser ursprünglich angefordert hat (einschließlich des Ports - wie er im Host-Header enthalten wäre), bevor ein Lastenausgleich usw. stattfindet.
Zumindest in unserer (ziemlich verworrenen!) Umgebung :)
Wenn sich dazwischen funky Proxys befinden, die den Host-Header neu schreiben, funktioniert dies auch nicht.
Update 30. Juli 2013
Wie von @KevinJones in den Kommentaren unten erwähnt, wurde die Einstellung, die ich im nächsten Abschnitt erwähne, hier dokumentiert: http://msdn.microsoft.com/en-us/library/hh975440.aspx
Ich muss zwar sagen, dass ich es nicht zum Laufen bringen konnte, als ich es ausprobiert habe - aber das könnte nur sein, dass ich einen Tippfehler mache oder so.
Update 9. Juli 2012
Ich bin vor einiger Zeit darauf gestoßen und wollte diese Antwort aktualisieren, habe es aber nie getan. Als gerade eine Gegenstimme zu dieser Antwort einging, dachte ich, ich sollte es jetzt tun.
Der 'Fehler', den ich in Asp.Net erwähne, kann mit einem scheinbar undokumentierten appSettings-Wert gesteuert werden - genannt
'aspnet:UseHostHeaderForRequest'
- dh:Ich bin beim Betrachten
HttpRequest.Url
in ILSpy darauf gestoßen - angezeigt durch--->
das links von der folgenden Kopie / Einfügen aus dieser ILSpy-Ansicht:Ich persönlich habe es nicht benutzt - es ist nicht dokumentiert und daher nicht garantiert, dass es dabei bleibt - aber es könnte dasselbe tun, was ich oben erwähnt habe. Um die Relevanz in den Suchergebnissen zu erhöhen und jemanden anzuerkennen, der dies entdeckt zu haben scheint, wurde die
'aspnet:UseHostHeaderForRequest'
Einstellung auch von Nick Aceves auf Twitter erwähntquelle
quelle
sollte perfekt funktionieren, besonders wenn Sie nur den relativen Uri wollen (aber Querystringe behalten)
quelle
Auch ich habe dies aus Facebook-Gründen gesucht und keine der bisher gegebenen Antworten hat nach Bedarf funktioniert oder ist zu kompliziert.
Ruft das vollständige Protokoll, den Host und den Pfad "ohne" den Querystring ab. Enthält auch den Port, wenn Sie etwas anderes als den Standard-80 verwenden.
quelle
Mein Favorit ...
oder nur...
quelle
Eine Sache, die in anderen Antworten nicht erwähnt wird, ist die Groß- und Kleinschreibung, wenn an mehreren Stellen darauf verwiesen wird (was nicht in der ursprünglichen Frage enthalten ist, aber berücksichtigt werden sollte, da diese Frage in vielen ähnlichen Suchanfragen vorkommt ). Aufgrund anderer Antworten stellte ich fest, dass anfangs Folgendes für mich funktioniert hat:
Request.Url.AbsoluteUri.ToString()
Aber um zuverlässiger zu sein, wurde dies dann:
Request.Url.AbsoluteUri.ToString().ToLower()
Und dann für meine Anforderungen (Überprüfen, von welchem Domainnamen auf die Site zugegriffen wird, und Anzeigen des relevanten Inhalts):
Request.Url.AbsoluteUri.ToString().ToLower().Contains("xxxx")
quelle
Für mich war das Problem, als ich versuchte, auf
HTTPContext
den Konstruktor des Controllers zuzugreifen, während erHTTPContext
noch nicht bereit ist. Beim Verschieben in die Index-Methode hat es funktioniert:quelle
Der Fall (Einzelseitenstil) für den Browserverlauf
quelle