作者:王怡君3018 | 来源:互联网 | 2023-05-18 16:30
我的API中的数据服务层需要httpcontext中请求的信息,我读了这个问题,他们说我应该使用ActionContext而不是HttpContext.Current(在MVC6中停止).
第一种方法是通过重写此方法来设置控制器内的数据:
public void OnActionExecuting(ActionExecutingContext context)
{
var routeData = context.RouteData;
var httpCOntext= context.HttpContext;
...
}
或者通过注入服务层来使用DI
public MyService(IContextAccessor contextAccessor)
{
_httpCOntext= contextAccessor.Value.HttpContext;
_routeData = contextAccessor.Value.RouteData;
}
但我不确定下面列出的这两行代码是否正确
services.AddTransient,ContextAccessor>();
services.AddTransient>();
当我这样做时,我得到了这个错误.
尝试激活时无法解析"Microsoft.AspNet.Mvc.ActionContext"类型的服务
更新
project.json 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"
Kiran Challa..
45
如果您尝试访问HttpContext
,则可以将其IHttpContextAccessor
用于此目的.
例:
services.AddTransient();
public class QueryValueService
{
private readonly IHttpContextAccessor _accessor;
public QueryValueService(IHttpContextAccessor httpContextAccessor)
{
_accessor = httpContextAccessor;
}
public string GetValue()
{
return _accessor.HttpContext.Request.Query["value"];
}
}
请注意,在上面的例子中QueryValueService
应注册仅作为 Transient
或Scoped
不Singleton
作为的HttpContext是每个请求的基础...
1> Kiran Challa..:
如果您尝试访问HttpContext
,则可以将其IHttpContextAccessor
用于此目的.
例:
services.AddTransient();
public class QueryValueService
{
private readonly IHttpContextAccessor _accessor;
public QueryValueService(IHttpContextAccessor httpContextAccessor)
{
_accessor = httpContextAccessor;
}
public string GetValue()
{
return _accessor.HttpContext.Request.Query["value"];
}
}
请注意,在上面的例子中QueryValueService
应注册仅作为 Transient
或Scoped
不Singleton
作为的HttpContext是每个请求的基础...
@steve,这是一个我要问的关于我要做什么的问题http://stackoverflow.com/questions/29113206/change-injected-object-at-runtime,我会在你的意见中提出你的意见,我会给你买杯咖啡