lunes, 14 de febrero de 2011

ASP.NET - Ocultar metodos de Servicio Web y mostrar página personalizada

acceso-restringido
Ya habíamos comentado en un anterior post sobre cómo podíamos hacer para ocultar los métodos de un web service, es decir que si alguien accede a nuestro web service via url, no tenga la capacidad de visualizar cuáles son los métodos ni cuáles son los parámetros que requiere cada uno.
Esta vez vamos a mostrar una manera alternativa a aquella solución, y esta vez será más personalizada... en lugar de mostrar un error como lo hicimos anteriormente, esta vez mostraremos una pagina aspx con un mensaje personalizado.
Vamos a empezar con el ejemplo:
1.- añadan un web service y añadan algún método... luego
2.- añadan una página aspx llamada Presenter.aspx y pongan el sgte código en el lado aspx:
<h2 style="text-align: center">
Esta página se muestra como portada del web service</h2>
<h3 style="text-align: center">
de esta manera ocultamos los métodos del web service</h3>
<div style="text-align: center">
<img title="Acceso Restringido" src="http://conciencianoosfera.files.wordpress.com/2009/09/acceso-restringido.jpg"
style="width: 300px; height: 500px" alt="Acceso Restringido">
</div>

3.- vayan al web.config y escriban lo sgte entre las etiquetas </system.web>

<webServices>
<wsdlHelpGenerator href="Presenter.aspx"/>
</webServices>
Luego ejecuten el web service y verán lo que ocurre. Interesante no?

web_service_documentation_hidden

Sigamos. Ahora, para evitar despachar la documentación .disco o WSDL, podemos hacer lo sgte:

1.- Añadan el archivo Global.asax y pongan el sgte código:

protected void Application_BeginRequest(Object sender, EventArgs e)
{
string currentRequest = Request.RawUrl.Trim().ToLower();
if (currentRequest.IndexOf("?wsdl") > 0 || currentRequest.IndexOf("?disco") > 0)
{ 
throw new HttpException(404, string.Empty);
}
}
Espero que les sea de utilidad ;)

2 comentarios:

veneno dijo...

Excelente post amigo, me ayudo bastante, estuve buscando pero nadie lo decia asi de sencillo, pero ahora tengo una duda, quiero que se muestre una pagina personalizada como la que mencionas pero esa pagina tendra campos para poder loggearse y si el usuario es el correcto podra ver los metodos del servicio web. crees que se pueda lograr esto? seria borrando la llave del web config?

De antemano gracias, Saludos!!!

Unknown dijo...
Este comentario ha sido eliminado por el autor.