c# - pierna - inyeccion intramuscular brazo
Cómo inyectar correctamente HttpContext en MVC6 (1)
Mi capa de servicio de datos en mi API requería información que corresponde a la solicitud en httpcontext, leí esta question y dijeron que debería usar ActionContext en lugar de HttpContext.Current (descontinuar en MVC6).
La primera forma es configurar los datos dentro del controlador anulando este método:
public void OnActionExecuting(ActionExecutingContext context)
{
var routeData = context.RouteData;
var httpContext = context.HttpContext;
...
}
O usando DI inyectando en la capa de servicio
public MyService(IContextAccessor<ActionContext> contextAccessor)
{
_httpContext = contextAccessor.Value.HttpContext;
_routeData = contextAccessor.Value.RouteData;
}
pero no estoy seguro de que la línea de código que figura a continuación sea la forma correcta de realizar la DI
services.AddTransient<IContextAccessor<ActionContext>,ContextAccessor>();
services.AddTransient<IContextAccessor<ActionContext>>();
Cuando hago esto me sale este error.
No se puede resolver el servicio para el tipo ''Microsoft.AspNet.Mvc.ActionContext'' al intentar activar
Actualizar proyecto.json proyecto web
"DIMultiTenan.Infrastructure": "",
"DIMultiTenan.MongoImplementation": "",
"Microsoft.AspNet.Server.IIS": "1.0.0-beta3",
"Microsoft.AspNet.Mvc": "6.0.0-beta3",
"Microsoft.AspNet.StaticFiles": "1.0.0-beta3",
"Microsoft.AspNet.Server.WebListener": "1.0.0-beta3"
Si está intentando acceder a HttpContext
, entonces puede usar IHttpContextAccessor
para este propósito.
Ejemplo:
services.AddTransient<QueryValueService>();
public class QueryValueService
{
private readonly IHttpContextAccessor _accessor;
public QueryValueService(IHttpContextAccessor httpContextAccessor)
{
_accessor = httpContextAccessor;
}
public string GetValue()
{
return _accessor.HttpContext.Request.Query["value"];
}
}
Tenga en cuenta que en el ejemplo anterior, QueryValueService
debe registrarse solo como Transient
o Con Scoped
y no como Singleton
ya que HttpContext se basa en la solicitud ...