0:00 0 0
Uso de sesiones en WebApi

Uso de sesiones en WebApi

  DrUalcman |  December 52019

En este blog quiero comentar un poco por encima como poder habilitar el uso de variables de sesión en un WebApi con MVC y C#. He investigado varias formas y la verdad que si lo comparamos con cómo se puede hacer en el mundo WebForms, se puede decir que es un poco más complicado. Una de las características que menos me ha gustado de como manejar las variables de sesión en el mundo MVC, es que lo habilitas para TODAS las llamadas a los métodos de la API, o por lo menos, yo aún no he encontrado como hacer, algo parecido, a lo que se hace en WebFroms que sólo lo habilitas cuando realmente necesitas utilizar una variable de sesión.

En los enlaces que os comparto, como siempre, podréis encontrar más información al respecto, y si alguien da con la solución para poder habilitar las variables de sesión en las llamas a las API dónde se necesitan, de una forma sencilla, que comente y lo comparta con todos.

Como hacerlo en WebForms

Si estás utilizando WebForms, habilitar el uso de variables de sesión es tan fácil como al declarar el WebMethod y pasarle el parámetro EnableSession = true. En el siguiente ejemplo de código queda muy claro como hacerlo:

/// 
/// My WebService in WebForm
///

[WebService(Namespace = "https://localhost/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]
public class shop : System.Web.Services.WebService
{
[WebMethod(EnableSession = true)]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string GetUserId()
{
var user = Session["user"] as usuarios;
return user.idCliente;
}

[WebMethod()]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string Hello(string nombre)
{
return "Hellor " + nombre;
}
}
Como se puede observar, si no necesitas hacer uso de la sesión, no hace falta pasar ningún parámetro.

Como hacerlo en WebApi con MVC

Como ya he comendato en WebApi de MVC hay varias formas de poder disponer de variables de sesión, pero inicialmente se habilita para todas las llamadas a la Api, cosa particularmente a mi no me gusta mucho, pero si alguien sabe como hacerlo, gustoso estoy de leer los comentarios.

La forma más sencilla

La manera que más fácil me parece es habilitarlo desde el fichero Global.asax de nuestra aplicación. Es apenas una línea y queda ya definido para poder utilizar variables de sesión en nuestra WebApi. La llamada la tenemos que hacer en el método Application_PostAuthenticateRequest. Yo he intentado hacer esta llamada en otros lugares y no funciona, ya que hay que hacer la declaración antes de la creación de las opciones de request.

        protected void Application_PostAuthenticateRequest(object sender, EventArgs e)
{
//implement session on api calls
HttpContext.Current.SetSessionStateBehavior(System.Web.SessionState.SessionStateBehavior.Required);
}

Recordar que para hacer uso luego de la sesión debes de llamar al nameservice System.Web y acceder a HttpContect.Current.Session para acceder a las propiedades y métodos de la sessión.

Otra forma más trabajada

Continuando con el ejemplo anterior, y tras leer toda la documentación que encontré por el camino, esta es la propuesta que más me gusta, ya que en un principio sólo habilitamos la sesión cuando hacemos una llamada al WebApi.

Básicamente lo que hacemos es declarar un par de variable globales en el Global.asax para manejar desde dónde se produce la llamada, y si es desde la WebApi entonces habilitar el usu de sesiones.

        #region session for API calls
private const string _WebApiPrefix = "api";
private static string _WebApiExecutionPath = String.Format("~/{0}", _WebApiPrefix);
private static bool IsWebApiRequest()
{
return HttpContext.Current.Request.AppRelativeCurrentExecutionFilePath.StartsWith(_WebApiExecutionPath);
}
#endregion

protected void Application_PostAuthenticateRequest(object sender, EventArgs e)
{
//implement session on api calls
if (IsWebApiRequest())
{
HttpContext.Current.SetSessionStateBehavior(System.Web.SessionState.SessionStateBehavior.Required);
}
}

Más información

En los links que os comparto tenéis más información, por desgracia en inglés, de como implementar las sesiones en WebApi, aquí he pretendido hacer un resumen, y como es costumbre en mis blogs, presentar la manera más sencilla, o por lo menos, la que a mí me ha parecido más sencilla para solucionar un problema concreto.

Happi codding

#CSHARP #MVC

0 Comment

 
 
 

File