[英]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.