2010-11-24 9 views
8

Estoy escribiendo un servicio web y quiero averiguar la URL que el cliente usó para llamar a mi WebMethod.¿Cómo puedo obtener la URL solicitada en un servicio web usando asp.net?

Ok..i explicará en detalle ..

Supongamos que tengo un servicio web (http: //myWebservice/HashGenerator/HashValidator.asmx) de la siguiente manera

[WebMethod] 
public string ValidateCode(string sCode) 
{ 
    //need to check requested url here.The call will be coming from different sites 
    //For example www.abc.com/accesscode.aspx 
} 

favor envíame una solución para esto.

+0

favor dar más detalles. ¿Qué quiere decir con "obtener la URL solicitada"? ¿Estás tratando de descargar los contenidos? –

+0

Creo que está escribiendo un servicio web y quiere averiguar la URL que el cliente usó para llamar a su WebMethod. – Turrau

+0

Ok, entonces Darin tiene razón: no puede hacer esto a menos que lo pase como argumento a su método web o algún encabezado HTTP personalizado. – Turrau

Respuesta

5

Su pregunta no es muy clara. Si intenta obtener la URL de la página ASPX que llama al servicio web, no podrá hacerlo a menos que la pase como argumento a su método web o algún encabezado HTTP personalizado. He aquí un ejemplo de una llamada:

var proxy = new YourWebServiceProxy(); 
string currentUrl = HttpContext.Current.Request.Url.ToString(); 
proxy.ValidateCode("some code", currentUrl); 

y su método de servicio Web ahora se ve así:

[WebMethod] 
public string ValidateCode(string sCode, string callerUrl) 
{ 
    ... 
} 
+0

Estoy escribiendo un servicio web y quiero averiguar la URL que el cliente usó para llamar a mi WebMethod. – user455423

+0

Como dije, si el cliente no pasa esta información como argumento a su servicio web, nunca podrá obtenerla. Imagine un cliente de aplicación de consola que consuma su servicio web: ni siquiera hay una noción de URL allí. –

+0

Entonces, Ramesh o mi respuesta deberían ayudarte. – Turrau

17

Si está en servicio web .asmx y necesita para obtener la url actual, puede probar el abajo.

HttpContext.Current.Request.Url 
+2

¿Por qué querría obtener la URL actual? Él ya lo sabe. –

+0

esto obtendrá la URL del servicio web actual ... quiero la URL que el cliente usó para llamar a mi WebMethod. – user455423

+0

@ user455423, mira mi respuesta entonces. –

5

para obtener información de las vistas previas de la solicitud del cliente a la página web actual se puede utilizar el UrlReferrer de la siguiente manera:

//To get the Absolute path of the URI use this 
string myPreviousAbsolutePath = Page.Request.UrlReferrer.AbsolutePath; 

//To get the Path and Query of the URI use this 
string myPreviousPathAndQuery = Page.Request.UrlReferrer.PathAndQuery; 
1

EDIT: Me he dado cuenta de lo que estoy haciendo en realidad es redundante, ya que la solicitud Ajax ya incluye un encabezado llamado Referer. Dejo el código a continuación, ya que aún es válido si desea pasar un encabezado personalizado y luego acceder a él en el servidor.

HttpContext.Current.Handler //This is null when using a web service 

Mi solución es añadir un encabezado personalizado a todas las llamadas de servicio web (usando jQuery .ajax). La cabecera contiene la dirección URL de la página de llamada:

$.ajaxSetup({ 
    headers: { 'CurrentUrl': '' + document.URL + '' } 
}); 

A continuación, en el servidor obtener el encabezado personalizado en el interior de su método de web:

HttpContext.Current.Request.Headers["CurrentUrl"] 

La razón principal que quiero la URL de la página que llama es Yo uso los parámetros querystring para la depuración. La línea siguiente le dará todos los parámetros de cadena de consulta de la página que llamó al servicio web.

HttpUtility.ParseQueryString(new Uri(HttpContext.Current.Request.Headers["CurrentUrl"]).Query) 
0

usted necesita este:

[WebMethod] 
public static string mywebmethod() 
{ 
string parameters = HttpContext.Current.Request.UrlReferrer.PathAndQuery.ToString(); 
return parameters 
} 
Cuestiones relacionadas