标签: httpcontext

为什么 IHttpContextAccessor.HttpContext 有时为 null?

使用 .Net Core 2.2,我使用 HttpClient 来调用 API 以及 Http 消息处理程序。消息处理程序注入IHttpContextAccessor,但该对象有时包含一个HttpContext为空的属性 - 我无法理解为什么它会为空。

这是启动时的服务注册:

services.AddTransient<HttpClientTokenHandler>();

services.AddHttpClient("client", c =>
    {
        c.BaseAddress = new Uri(options.ApiUrl.TrimEnd('/') + '/');
    }).AddHttpMessageHandler<HttpClientTokenHandler>();

services.AddHttpContextAccessor();

Run Code Online (Sandbox Code Playgroud)

以及 HttpContext 有时为 null 的令牌处理程序实现。

public HttpClientTokenHandler(IHttpContextAccessor context)
{
    _context = context;
}

protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{    
    var access_token = await _context.HttpContext.GetTokenAsync(Constants.TokenTypes.AccessToken);

    if (!string.IsNullOrEmpty(access_token))
    {
        request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", access_token);
    }
    var response = await base.SendAsync(request, cancellationToken);
    return response;
}
Run Code Online (Sandbox Code Playgroud)

_context.HttpContext当它只是被注入时,什么可能导致为空?

c# httpcontext .net-core delegatinghandler

5
推荐指数
0
解决办法
918
查看次数

为什么 razor 组件中的 HttpContext 为 null?

我在几个场景中使用了 dotnet core 3.1 Web 应用程序中的HttpContextfrom 。IHttpContextAccessor它总是按照我的预期设置。

但是,当注入Razor 组件HttpContext时,始终为 null 。IHttpContextAccessor

@inject IHttpContextAccessor HttpContextAccessor

<div>...</div>

@code {
    protected override async Task OnInitializedAsync()
    {
        // here, HttpContextAccessor.HttpContext == null
    }

    public string GetSomeInfo()
    {
        // here, HttpContextAccessor.HttpContext == null
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经像这样IHttpContextAccessor添加了Startup.cs/ConfigureServices()

services.AddHttpContextAccessor();
Run Code Online (Sandbox Code Playgroud)

为什么在HttpContext null这里?

httpcontext razor asp.net-core blazor-server-side

5
推荐指数
1
解决办法
3545
查看次数

HttpContext.Request.Path 和 HttpContext.Request.PathBase 之间的区别?

我想知道Web API 控制器HttpContext.Request.Path和Web API 控制器之间有什么区别?HttpContext.Request.PathBase我阅读了文档,但不明白预期的差异应该是什么,即使在测试了这两个属性之后:

public async Task<ActionResult<string>> PostItem(ItemPostRequest itemPostRequest)
{   
    // Output: Path is: '/api/items'
    Debug.WriteLine($"Path is: '{HttpContext.Request.Path}'");
    
    // Output: PathBase is: ''
    Debug.WriteLine($"PathBase is: '{HttpContext.Request.PathBase}'");

    // [...]
}
Run Code Online (Sandbox Code Playgroud)

什么时候PathBase非空?我用的是.NET 5.0。

c# httpcontext asp.net-core asp.net-core-webapi

5
推荐指数
1
解决办法
4044
查看次数

Azure 上的 ASP.NET HttpContext 为 null

我有一个托管在 Azure 上的 ASP.NET Blazor Web 应用程序。一切正常,除了一件小事。我按照文档IHttpContextAccessor.HttpContext中的描述使用。

    public class SessionService : ISessionService
    {
        private readonly IHttpContextAccessor httpContextAccessor;
        private readonly IUserService userService;

        public SessionService(
            IUserService userService,
            IHttpContextAccessor httpContextAccessor)
        {
            this.userService = userService;
            this.httpContextAccessor = httpContextAccessor;
        }

        public async Task<User> GetUser()
        {
            var userId = this.httpContextAccessor.HttpContext?.Items["userId"]?.ToString();
            
            if (userId == null)
            {
                return null;
            }

            if (!int.TryParse(userId, out var parsedUserId))
            {
                return null;
            }

            return await this.userService.Get(parsedUserId);
        }

        /// <inheritdoc />
        public async Task AuthenticateUser()
        {
            if (this.httpContextAccessor.HttpContext == null) …
Run Code Online (Sandbox Code Playgroud)

asp.net httpcontext blazor-server-side

5
推荐指数
1
解决办法
1790
查看次数

是否可以复制/克隆Web请求的HttpContext

克隆当前请求的HttpContext实例最简单的方法是什么?

我正在开发Asp.net MVC v1中的应用程序.我将常规的PartialView功能升级为实际上具有非常相似的子控制器,但具有自己的上下文.使用PartialViews时,必须在主视图的控制器操作中填充局部视图的视图数据.我创建了自己的功能,可以从视图中调用控制器操作.这样我得到:

  • 我不必在主视图的控制器操作中提供子视图的数据
  • 子控制器方法可以操纵更多封装的数据,而与其他视图/控制器没有任何关系

问题是每个子控制器请求都使用HttpContext.因此,当我在子控制器中设置一些HttpContext.Item时,它实际上填充了实际请求的HttpContext.

这就是我想要克隆HttpContext的原因.我已经在使用:

HttpContext subContext = new HttpContext(request, response);
// what happened to Session, User, Items etc. properties?
Run Code Online (Sandbox Code Playgroud)

但这并没有设置除请求和响应之外的任何内容.但我可能还需要其他属性和集合......如会话,项目,用户......等.

asp.net-mvc httpcontext cloning

4
推荐指数
1
解决办法
5658
查看次数

ASP.NET会话对象中的实体框架对象上下文?

我们有一个多层的Asp.NET Web窗体应用程序.数据层有一个名为DataAccessimpements 的类,IDisposable并且我们将Entity Framework Object Context的实例作为私有字段.该类有许多公共方法返回各种实体集合,并在处理时将处置其对象上下文.

由于我们一直面临的许多问题,我们认为DataAccess在服务器上保持对象上下文(或实例)的范围更长是一个很大的好处.有人建议,以保持一个实例在HttpContext.Current.Items收集从这个职位,以便让每个Http请求一个实例.

我想知道的是:在HttpContext.Current.Session对象中存储我们的对象上下文的实例会产生什么问题/顾虑/问题?

  • 我假设Session对象已完成并在用户会话到期时设置为垃圾回收,因此实例将被正确处理.
  • 我假设大多数默认浏览器设置都会让我们的应用程序放置其SessionId cookie而不会有任何疑虑.
  • 对象上下文将要处理的数据量不是很大,并且不会对我们体面的服务器硬件造成问题,关于随时间缓存和相对较少的并发用户.

这将相对快速地实施,并且不会影响我们现有的许多单元测试.

我们将使用AutoFac和ServiceProvider类来提供实例.当需要ObjectContext的实例时,它将由类似于此的代码返回:

private static Entities GetEntities(IContext context)
{
    if (HttpContext.Current == null)
    {
        return new Entities();
    }

    if (HttpContext.Current.Session[entitiesKeyString] == null)
    {
        HttpContext.Current.Session[entitiesKeyString] = new Entities();
    }

    return (Entities)HttpContext.Current.Session[entitiesKeyString];
}
Run Code Online (Sandbox Code Playgroud)

干杯.

asp.net session entity-framework httpcontext objectcontext

4
推荐指数
1
解决办法
1万
查看次数

静态方法中的HttpContext.Current NullReferenceException

我有一个静态类,有几个静态方法.在这些方法中,我试图使用访问当前线程的上下文HttpContext.Current.例如:

var userName = HttpContext.Current.User.Identity.Name;
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时,我会收到一个NullReferenceException臭名昭着的"对象引用未设置为对象的实例".

有任何想法吗?

asp.net session static-methods httpcontext nullreferenceexception

4
推荐指数
1
解决办法
8044
查看次数

在Page_Init期间强制HTTPS的最简单方法

在我网站的很少页面上,我想确保它们只能通过HTTPS连接访问.实现这一目标的最佳方式是什么?我看到的所有示例似乎都在尝试为整个网站执行此操作.

我希望寻找一种方法来实现这一目标上的Page_InitPage_Preload.

并重定向到Https版本

c# asp.net security https httpcontext

4
推荐指数
1
解决办法
333
查看次数

如何在ASP.NET Core中修改HttpContext.Request.Form

我有一个HttpContext.Request对象,该对象的Form数据有误,我想对其进行修复,并以正确的方式发送正确的HttpContext。HttpContext.Request.Form是只读的,但是如果不是,则只需执行以下操作即可;HttpContext.Request.Form [“ a”] =“ a的正确值”;

因此,在管道中执行此操作的最佳位置在哪里。是否可以通过反射访问HttpContext.Request.Form写操作?

httpcontext asp.net-core

4
推荐指数
1
解决办法
3171
查看次数

Asp.Net Core中的HttpContext.Features与HttpContext.Items

这两个属性之间有什么区别?

我可以使用HttpContext.Items而不是在HttpContext.Features之间共享数据middlewares。我看到的唯一区别是,我告诉Items了一个钥匙,它给了我对象,因此我必须强制转换它。此转换可以Features自动完成。

他们后面还有其他东西吗?

httpcontext asp.net-core

4
推荐指数
2
解决办法
2331
查看次数