Jah*_*han 4 c# asp.net-core-mvc asp.net-core asp.net-core-2.0
我想将一些代码升级到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);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
通过它注入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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
只需确保其实IHttpContextAccessor
现已在服务容器中注册即可。默认情况下不再添加它。
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2245 次 |
最近记录: |