Estoy usando el complemento de comentarios de Facebook en un blog que estoy construyendo. Tiene algunas etiquetas FBXML que son interpretadas por el javascript de Facebook al que se hace referencia en la página.
Todo esto funciona bien, pero tengo que pasar la URL actual y totalmente calificada al complemento.
<div style="width: 900px; margin: auto;">
<div id="fb-root"></div>
<fb:comments href="URL HERE" num_posts="10" width="900"></fb:comments>
</div>
¿Cuál es la mejor manera de obtener la URL de la página actual? La URL de solicitud.
Solución
Aquí está el código final de mi solución:
<fb:comments href="@Request.Url.AbsoluteUri" num_posts="15" width="900"></fb:comments>
c#
asp.net
asp.net-mvc
razor
Chev
fuente
fuente
Request.Url.ToString()
oRequest.Url.AbsoluteUri
?Request.Url.AbsoluteUri
lo hizo :)Agregue este método de extensión a su código:
Y luego puedes ejecutarlo desde
RequestContext.HttpContext.Request
propiedad.Hay un error (se puede evitar, ver a continuación) en Asp.Net que surge en máquinas que usan puertos que no son el puerto 80 para el sitio web local (un gran problema si los sitios web internos se publican a través del equilibrio de carga en IP virtual) y los puertos se usan internamente para publicar reglas) por lo que Asp.Net siempre agregará el puerto en el
AbsoluteUri
propiedad, incluso si la solicitud original no lo usa.Este código garantiza que la url devuelta siempre sea igual a la url que el navegador solicitó originalmente (incluido el puerto, ya que se incluiría en el encabezado del host) antes de que tenga lugar un equilibrio de carga, etc.
Al menos, lo hace en nuestro entorno (¡bastante complicado!) :)
Si hay algún proxy funky en el medio que reescriba el encabezado del host, entonces esto tampoco funcionará.
Actualización 30 de julio de 2013
Como mencionó @KevinJones en los comentarios a continuación, la configuración que menciono en la siguiente sección se ha documentado aquí: http://msdn.microsoft.com/en-us/library/hh975440.aspx
Aunque tengo que decir que no pude hacerlo funcionar cuando lo probé, pero eso podría ser solo yo haciendo un error tipográfico o algo así.
Actualización 9 de julio de 2012
Me encontré con esto hace un momento, y tenía la intención de actualizar esta respuesta, pero nunca lo hice. Cuando llegó un voto positivo sobre esta respuesta, pensé que debería hacerlo ahora.
El 'error' que menciono en Asp.Net se puede controlar con un valor de configuración de aplicación aparentemente indocumentado, llamado
'aspnet:UseHostHeaderForRequest'
, es decir:Me encontré con esto mientras miraba
HttpRequest.Url
en ILSpy, indicado por--->
la izquierda de la siguiente copia / pegado de esa vista de ILSpy:Personalmente no lo he usado, es indocumentado y, por lo tanto, no se garantiza que se quede, sin embargo, podría hacer lo mismo que mencioné anteriormente. Para aumentar la relevancia en los resultados de búsqueda, y para reconocer a alguien más que parece haber descubierto esto, Nick Aceves también ha mencionado la
'aspnet:UseHostHeaderForRequest'
configuración en Twitter.fuente
fuente
debería funcionar perfectamente, especialmente si solo desea el Uri relativo (pero manteniendo las cadenas de consulta)
fuente
Yo también estaba buscando esto por razones de Facebook y ninguna de las respuestas dadas hasta ahora funcionó según sea necesario o es demasiado complicada.
Obtiene el protocolo completo, el host y la ruta "sin" la cadena de consulta. También incluye el puerto si está utilizando algo distinto del valor predeterminado 80.
fuente
Mi favorito...
o solo...
fuente
Una cosa que no se menciona en otras respuestas es la distinción entre mayúsculas y minúsculas, si se hará referencia en varios lugares (lo cual no se encuentra en la pregunta original pero vale la pena tener en cuenta ya que esta pregunta aparece en muchas búsquedas similares ) Basado en otras respuestas, encontré que lo siguiente funcionó para mí inicialmente:
Request.Url.AbsoluteUri.ToString()
Pero para ser más confiable, esto se convirtió en:
Request.Url.AbsoluteUri.ToString().ToLower()
Y luego, para mis requisitos (verificar desde qué nombre de dominio se accede al sitio y mostrar el contenido relevante):
Request.Url.AbsoluteUri.ToString().ToLower().Contains("xxxx")
fuente
Para mí, el problema fue cuando intenté acceder
HTTPContext
en el constructor del controlador mientrasHTTPContext
aún no estaba listo. Cuando se movió dentro del método Index funcionó:fuente
El caso (estilo de página única) para el historial del navegador
fuente