首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在返回null时检索HttpContext属性?

在ASP.NET Core中,检索HttpContext属性时,如果返回null,可以尝试以下方法:

  1. 使用HttpContextAccessor:

在ASP.NET Core中,可以使用HttpContextAccessor来访问HttpContext。首先,需要在Startup.cs文件中注册HttpContextAccessor服务:

代码语言:csharp
复制
public void ConfigureServices(IServiceCollection services)
{
    services.AddHttpContextAccessor();
}

然后,在需要访问HttpContext的类中,使用IHttpContextAccessor来获取HttpContext:

代码语言:csharp
复制
public class MyClass
{
    private readonly IHttpContextAccessor _httpContextAccessor;

    public MyClass(IHttpContextAccessor httpContextAccessor)
    {
        _httpContextAccessor = httpContextAccessor;
    }

    public void MyMethod()
    {
        var httpContext = _httpContextAccessor.HttpContext;
        if (httpContext != null)
        {
            // 检索HttpContext属性
        }
    }
}
  1. 使用AsyncLocal:

在某些情况下,可以使用AsyncLocal来跟踪HttpContext。首先,需要创建一个AsyncLocal变量来存储HttpContext:

代码语言:csharp
复制
public class AsyncLocalHttpContext
{
    public static readonly AsyncLocal<HttpContext> Current = new AsyncLocal<HttpContext>();
}

然后,在中间件中将HttpContext设置到AsyncLocal变量中:

代码语言:csharp
复制
public class HttpContextMiddleware
{
    private readonly RequestDelegate _next;

    public HttpContextMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task InvokeAsync(HttpContext httpContext)
    {
        AsyncLocalHttpContext.Current.Value = httpContext;
        await _next(httpContext);
    }
}

最后,在Startup.cs文件中添加中间件:

代码语言:csharp
复制
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseMiddleware<HttpContextMiddleware>();
}

然后,在需要访问HttpContext的类中,使用AsyncLocal变量来获取HttpContext:

代码语言:csharp
复制
public class MyClass
{
    public void MyMethod()
    {
        var httpContext = AsyncLocalHttpContext.Current.Value;
        if (httpContext != null)
        {
            // 检索HttpContext属性
        }
    }
}

这样,在检索HttpContext属性时,如果返回null,可以使用上述方法来解决问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Serilog高级玩法之用Serilog记录所选终结点附加属性

    概括地说,您可以将这些属性分为两类: 请求/响应特性:Host,Scheme,ContentType,QueryString,EndpointName MVC / RazorPages相关的属性HandlerName...这里我们所关心的是EnrichDiagnosticContext属性。 设置了该属性的Action之后,在生成日志消息它将被Serilog中间件调用并执行。...下面的静态帮助器类从当前HttpContext上下文检索值,并在值可用时对其进行设置。 下面的静态helper类从当前HttpContext检索值,并在值可用时设置它们。...Other middleware } 现在,当您发出请求,您将看到添加到Serilog结构化日志中的所有其他属性: ?...这样的做法非常简单-您可以访问HttpContext,因此你可以检索它包含的任何可用的值,并将它们设置为IDiagnosticContext所提供的属性

    1.7K10

    用最简单的方式在ASP.NET Core应用中实现认证、登录和注销

    本篇文章提供了一个极简的实例让读者体验如何在ASP.NET Core应用中实现认证、登录和注销。...一旦拥有了由认证方颁发的认证票据,我们就可以按照双方协商的方式(通过Cookie或者报头)在请求中携带该认证票据,并以此票据声明的身份执行目标操作或者访问目标资源。...接下来我们就通过一个简单的实例来演示如何在一个ASP.NET Core应用中实现认证、登录和注销的功能。...在注册这些基础服务,我们还设置了默认采用的认证方案,静态类型CookieAuthenticationDefaults的AuthenticationScheme属性返回的就是Cookie认证方案的默认方案名称...由于我们要求浏览主页必须是经过认证的用户,所以该方法会利用HttpContext上下文的User属性返回的ClaimsPrincipal对象判断当前请求是否经过认证。

    3.4K30

    【初学者指南】在ASP.NET MVC 5中创建GridView

    介绍 在这篇文章中,我们将会学习如何在 ASP.NET MVC 中创建一个 gridview,就像 ASP.NET Web 表单中的 gridview 一样。...服务器端和客户端有许多可用的第三方库,这些库能够提供所有必需的功能, Web 表格中的搜索、排序和分页等。是否包含这些功能,取决于应用的特殊需求,例如在客户端和服务器端提供搜索或其它功能的需求等。...我们将在数据库上下文中为 Asset 表添加一个属性,这个属性将会成为 Asset 表的实体框架表示,用它来创建脚本。...在写控制器代码之前,我们需要为实体框架配置连接字符串,以便在操作数据库来连接数据库。因此,我们的连接字符串应该被指定给一个有效的数据源,以便我们在运行时应用不会被打断。...对于具有大量的数据,这是一个更好的方法。 通过本文的介绍,希望大家能够掌握在 ASP.NET MVC 5 中创建 GridView 的方法。

    6.2K90

    dotnet 用 ASP.NET Core 制作一个可以上传库文件的 NuGet 服务器

    在使用 ASP.NET Core 只能说工作量特别小 下面让我用 3 分钟告诉大家如何在 asp dotnet core 里面写一个支持被推送 nuget 包的服务器 首先是创建一个空白的工程,此时这个功能请去掉...IActionResult> Push([FromForm]FilePackage package) { } 注意加上 FromForm 特性,如果没有加上特性那么将会返回客户端...public class FilePackage { public IFormFile Package { set; get; } } 此时从参数里面拿到的 package 属性就是客户端上传的对应的...拿到,请看代码 var packageFile = package.Package; if (packageFile == null)...拿到 var key = HttpContext.Request.Headers["X-NuGet-ApiKey"]; 本文代码放在 github 欢迎小伙伴访问 顺便广告一下

    76410

    【asp.net core 系列】13 Identity 身份验证入门

    前言 通过前两篇我们实现了如何在Service层如何访问数据,以及如何运用简单的加密算法对数据加密。这一篇我们将探索如何实现asp.net core的身份验证。 ? 1....Configuration.Bind("CookieSettings",options); }); 此时可以启动一个权限验证,当用户访问需要验证的页面或接口,...在asp.net core中,Controller类里有一个属性: public HttpContext HttpContext { get; } HttpContext 提供了一个扩展方法,可以用来保存用户信息...: public static Task SignInAsync(this HttpContext context, ClaimsPrincipal principal); 暂时忽略这个方法的返回类型...WriteTo(BinaryWriter writer, byte[] userData); } 所以,看到这里就会发现,我们可以通过以下方式保存信息: List claims = null

    98420

    C#的Process类调用第三方插件实现PDF文件转SWF文件

    在项目开发过程中,有时会需要用到调用第三方程序实现本系统的某一些功能,例如本文中需要使用到的swftools插件,那么如何在程序中使用这个插件,并且该插件是如何将PDF文件转化为SWF文件的呢...调用 Start ,StartInfo 用于指定要启动的进程。 唯一必须设置的 StartInfo 成员是 FileName 属性。      ...,在实际的开发项目中无须对每个属性方法和属性的底层实现做全面的了解,但建议在学习该类的时候,适当的了解一下某一些类的方法实现,有助于我们很好的掌握该类。...a/b/c.pdf /// 生成后的FLV文件地址,/a/b/c.swf...在项目开发中,任何一个功能是无法做法完成所有的功能,在编码功能,只能尽可能的考虑到方法的通用性,在理解了某一个类和某一个插件的基本原理和使用方法后,可以根据对应的API进行添加新功能。

    1.6K60
    领券