热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在MVC6中正确地注入HttpContext

如何解决《如何在MVC6中正确地注入HttpContext》经验,为你挑选了1个好方法。

我的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应注册仅作为 TransientScopedSingleton作为的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应注册仅作为 TransientScopedSingleton作为的HttpContext是每个请求的基础...


@steve,这是一个我要问的关于我要做什么的问题http://stackoverflow.com/questions/29113206/change-injected-object-at-runtime,我会在你的意见中提出你的意见,我会给你买杯咖啡
推荐阅读
author-avatar
王怡君3018
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有