Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Microsoft.AspNetCore.Mvc.ControllerBase.Request.*get**返回空值_C#_Asp.net Core - Fatal编程技术网

C# Microsoft.AspNetCore.Mvc.ControllerBase.Request.*get**返回空值

C# Microsoft.AspNetCore.Mvc.ControllerBase.Request.*get**返回空值,c#,asp.net-core,C#,Asp.net Core,在ASP.Net Core 3.1项目中,我从ControllerBase继承了一个基本控制器,如下所示: [Authorize] public abstract class BaseController : ControllerBase { protected readonly IMapper mapper; protected readonly ILogger logger; protected BaseController( IMapper map

在ASP.Net Core 3.1项目中,我从ControllerBase继承了一个基本控制器,如下所示:

[Authorize]
public abstract class BaseController : ControllerBase
{
    protected readonly IMapper mapper;
    protected readonly ILogger logger;

    protected BaseController(
        IMapper mapper, 
        ILogger logger)
    {
        this.mapper = mapper;
        this.logger = logger;

        var ok = Request.HttpContext.Items.TryGetValue("value", out object value);
    }
} 
然后是从中继承的控制器,例如:

[Route("api/[Controller]"]
public class MyController : BaseController
{
    public MyController(
        IMapper mapper, 
        ILogger<MyController> logger, 
        /*...some other services injected here...*/) : base(mapper, logger)
    { }
} 
我有一个中间件设置,它在头的Items集合中设置值项。正在按预期设置该值

但是,只要我点击基本控制器的构造函数,所有属性都是null Request、HttpConext、ControllerContext等

上面的设置在WebApi2上运行良好


我在这里缺少什么?

在ASP.Net Core 3+中执行此操作的方法是将IHttpContextAccessor注入控制器,然后将其注册为Singleton

当我使用Autofac处理DI时,我添加了:

        builder.RegisterType<HttpContextAccessor>()
             .As<IHttpContextAccessor>()
             .SingleInstance();

在ASP.NETCore3+中执行此操作的方法是将IHttpContextAccessor注入控制器,然后将其注册为单例

当我使用Autofac处理DI时,我添加了:

        builder.RegisterType<HttpContextAccessor>()
             .As<IHttpContextAccessor>()
             .SingleInstance();
您可以使用IHttpContextAccessor访问asp.net核心中的HttpContext

首先,必须像下面这样在ConfigureServices方法中注册IHttpContextAccessor

services.AddHttpContextAccessor; 然后从DI访问HttpContext

受保护基站控制器 IMapper映射器, ILogger记录器, IHttpContextAccessor httpContextAccessor { this.mapper=mapper; this.logger=记录器; var ok=httpContextAccessor.HttpContext.Items.TryGetValuevalue,输出对象值; } 您可以使用IHttpContextAccessor访问asp.net核心中的HttpContext

首先,必须像下面这样在ConfigureServices方法中注册IHttpContextAccessor

services.AddHttpContextAccessor; 然后从DI访问HttpContext

受保护基站控制器 IMapper映射器, ILogger记录器, IHttpContextAccessor httpContextAccessor { this.mapper=mapper; this.logger=记录器; var ok=httpContextAccessor.HttpContext.Items.TryGetValuevalue,输出对象值; }
做你的演员public@JohanP输入错误,代码中的输入错误是公共的。@dcg抱歉,另一个输入错误!!正在代码中调用基ctor。请创建您的ctorpublic@JohanP输入错误,代码中的输入错误是公共的。@dcg抱歉,另一个输入错误!!正在代码中调用基本构造函数。