gpt4 book ai didi

c# - ASP.NET Core 2 中 HttpContext.Current.Items.Contains(DataContextKey) 的替代方案

转载 作者:行者123 更新时间:2023-11-30 23:06:42 25 4
gpt4 key购买 nike

我想将一些代码升级到 ASP.NET Core 2。我知道 HttpContext.Current 已从 ASP.NET Core 2 中删除,并且必须使用 IHttpContextAccessor

但我不知道该如何替换这段代码:

HttpContext.Current.Items.Contains(DataContextKey)

我该怎么做?

完整代码:

namespace Jahan.Infrastructure.DataAccess.DataContextStorage
{
public class HttpDataContextStorageContainer<T> : IDataContextStorageContainer<T> where T : class
{
private const string DataContextKey = "DataContext";

public T GetDataContext()
{
T objectContext = null;
if (HttpContext.Current.Items.Contains(DataContextKey))
{
objectContext = (T)HttpContext.Current.Items[DataContextKey];
}
return objectContext;
}

public void Clear()
{
if (HttpContext.Current.Items.Contains(DataContextKey))
{
HttpContext.Current.Items[DataContextKey] = null;
}
}

public void Store(T objectContext)
{
if (HttpContext.Current.Items.Contains(DataContextKey))
{
HttpContext.Current.Items[DataContextKey] = objectContext;
}
else
{
HttpContext.Current.Items.Add(DataContextKey, objectContext);
}
}
}
}

最佳答案

注入(inject) IHttpContextAccessor 并通过它访问当前的 HttpContext。其余的应该足够简单以进行重构。

例如。

public class HttpDataContextStorageContainer<T> : IDataContextStorageContainer<T> where T : class {
private const string DataContextKey = "DataContext";
private readonly IHttpContextAccessor accessor;

public HttpDataContextStorageContainer(IHttpContextAccessor accessor) {
this.accessor = accessor;
}

public T GetDataContext() {
var current = accessor.HttpContext;
T objectContext = null;
if (current.Items.ContainsKey(DataContextKey)) {
objectContext = (T)current.Items[DataContextKey];
}
return objectContext;
}

public void Clear() {
var current = accessor.HttpContext;
if (current.Items.ContainsKey(DataContextKey)) {
current.Items[DataContextKey] = null;
}
}

public void Store(T objectContext) {
var current = accessor.HttpContext;
if (current.Items.ContainsKey(DataContextKey)) {
current.Items[DataContextKey] = objectContext;
} else {
current.Items.Add(DataContextKey, objectContext);
}
}
}

只需确保 IHttpContextAccessor 及其实现已在服务容器中注册。默认情况下不再添加它。

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

关于c# - ASP.NET Core 2 中 HttpContext.Current.Items.Contains(DataContextKey) 的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47956577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com