Son*_*Sam 23 c# asp.net-core-mvc asp.net-core
我的API中的数据服务层需要httpcontext中请求的信息,我读了这个问题,他们说我应该使用ActionContext而不是HttpContext.Current(在MVC6中停止).
第一种方法是通过重写此方法来设置控制器内的数据:
public void OnActionExecuting(ActionExecutingContext context)
{
    var routeData = context.RouteData;
    var httpContext = context.HttpContext;
    ...
}
Run Code Online (Sandbox Code Playgroud)
或者通过注入服务层来使用DI
public MyService(IContextAccessor<ActionContext> contextAccessor)
{
    _httpContext = contextAccessor.Value.HttpContext;
    _routeData = contextAccessor.Value.RouteData;
}
Run Code Online (Sandbox Code Playgroud)
但我不确定下面列出的这两行代码是否正确
services.AddTransient<IContextAccessor<ActionContext>,ContextAccessor>();
services.AddTransient<IContextAccessor<ActionContext>>();
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我得到了这个错误.
尝试激活时无法解析"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"
Run Code Online (Sandbox Code Playgroud)
    Kir*_*lla 45
如果您尝试访问HttpContext,则可以将其IHttpContextAccessor用于此目的.
例:
services.AddTransient<QueryValueService>();
Run Code Online (Sandbox Code Playgroud)
public class QueryValueService
{
    private readonly IHttpContextAccessor _accessor;
    public QueryValueService(IHttpContextAccessor httpContextAccessor)
    {
        _accessor = httpContextAccessor;
    }
    public string GetValue()
    {
        return _accessor.HttpContext.Request.Query["value"];
    }
}
Run Code Online (Sandbox Code Playgroud)
请注意,在上面的例子中QueryValueService应注册仅作为   Transient或Scoped不Singleton作为的HttpContext是每个请求的基础...
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           12784 次  |  
        
|   最近记录:  |