[英]Net Core: 'HttpContext' does not contain a definition for 'Current'`
[英]HttpContext doess not contain definition for Current
public static IOwinContext CurrentContext
{
get
{
return HttpContext.Current.GetOwinContext();
}
}
对于这种方法,我面临的问题是Httpcontext不包含Current的定义。
我已经添加了System.aspnetcore.selfhost nuget软件包,该软件包支持system.web,但它也无法正常工作
public static class OwinContextExtensions
{
public static int GetClientID()
{
int result = 0;
var claim = CurrentContext.Authentication.User.Claims.FirstOrDefault(c => c.Type == "ClientID");
if (claim != null)
{
result = Convert.ToInt32(claim.Value);
}
return result;
}
public static IOwinContext CurrentContext
{
get
{
**return HttpContext.Current.GetOwinContext();//here getting error**
}
}
}
如何编写此方法的返回值public static IOwinContext CurrentContext
在ASP.NET中, HttpContext是一个临时对象,该对象为每个请求创建一次; 但该服务应注册为单身人士(感谢@poke进行此评论)。 在控制器外部,使用依赖注入来解决问题。 定义类似于以下内容的静态类:
using System.Linq;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace YourNamespace.Services
{
public static class MyAppContext
{
private static readonly IHttpContextAccessor _httpContextAccessor;
public static void Configure(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
// ...
}
public static int GetClientID()
{
int result = 0;
var claim = CurrentHttpContext.User.Claims.FirstOrDefault(c => c.Type == "ClientID");
if (claim != null)
{
result = Convert.ToInt32(claim.Value);
}
return result;
}
// You can even expose the current HTTP context
public static HttpContext CurrentHttpContext { get { return _httpContextAccessor.HttpContext; } }
}
}
在Startup.cs中 ,配置服务:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// if using .NET Core 2.1 or above use:
// services.AddHttpContextAccessor();
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
// ...
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
//...
var ctx = app.ApplicationServices.GetRequiredService<IHttpContextAccessor>();
YourNamespace.Services.MyAppContext.Configure(ctx);
// ...
}
}
感谢建设性的批评家/建议,我认为这是一个更好的解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.