Es posible acceder HttpContext.Actual.Sesión a través de un WebAPI ? nos podemos heredar IRequiresSession?

Tengo un controlador genérico de la Sesión se establece después de una llamada a la API que quiero quitar.

public void AccountController : ApiController, IRequiresSessionState
{
public void Login()
{
setsession(){}
} 
}
  • Lo más probable es que necesite configurar asp.net para usar la Autenticación de Formularios, aunque puede ser posible de otra manera.
  • ESTOY usando Formularios Web
InformationsquelleAutor Kubi | 2013-11-09

2 Comentarios

  1. 49

    Técnicamente, sí, aunque realmente me gustaría aconsejar en contra de esta práctica – una API REST debe ser completamente apátridas (las «cookies» y otras del lado del cliente del estado es OK).

    Si usted absolutamente debe hacer esto, usted puede agarrar el contexto de HTTP así:

    var context = Request.Properties["MS_HttpContext"] as HttpContext;

    Momento en que usted sólo tiene que utilizar sus Sesión propiedad para obtener la sesión.

    Nota que esto rompe ciertos contratos asumidos por System.Net.Http, específicamente, esto significa que su API controladores no pueden ser auto-organizada, porque están junto a ASP.NET. Si estás bien con esto, y con el hecho de que su API controladores pueden no funcionar correctamente a partir de una granja de servidores web a menos que usted re-arquitecto de todo lo que a uso distribuido de sesiones – bien, entonces, ir a por ello.

    P. S. también es posible utilizar IRequiresSessionState, pero no se puede utilizar en el controlador de sí mismo, usted necesita para utilizar en un HttpControllerHandler y establecer como RouteHandler. El enfoque se describe en este hilo de MSDN. De nuevo, no puedo recomendar lo suficientemente fuerte como contra esta idea, se viola el principio básico de una Web API – pero, si tienes un realmente buena razón para ello, entonces es otra opción que es un poco más reutilizables.

    • Todo el mundo da esta advertencia, PERO casi todos los webapi que tiene la autorización y básicamente hace lo mismo que el de las sesiones…. se usa un token para encontrar el estado actual de la que dice si se puede o no se puede hacer algo. (cosas como JWT hacer las cosas un poco diferentes, pero recibe una gran cantidad de odio de expertos en seguridad para que )
    • Gracias @KeithNicholas, estaba a punto de preguntar si usted tiene un Auth token / cookie, entonces ¿cómo se puede agarrar sin esto!
  2. 16

    Colada como HttpContext no me funciona el uso de la Api de Web 2.1. Sin embargo, yo podría utilizar HttpContextWrapper.

    var context = Request.Properties["MS_HttpContext"] as HttpContextWrapper;
    • Esto funciona, pero la Sesión parámetro es null.

Dejar respuesta

Please enter your comment!
Please enter your name here