在ASP.NET Core中,使用AddScoped
注册的服务在同一请求中无法保持数据的问题是由于每个请求都会创建一个新的IServiceProvider
实例导致的。解决该问题的方法是使用HttpContext
来存储和获取数据。
以下是一个示例代码,演示如何在同一请求中保持数据:
首先,创建一个自定义的服务类,用于存储数据:
public class MyData
{
public string Value { get; set; }
}
然后,在Startup.cs
文件的ConfigureServices
方法中进行服务的注册:
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped(); // 注册自定义的服务类
// ...
}
接下来,在控制器或中间件中使用HttpContext
来存储和获取数据:
public class HomeController : Controller
{
private readonly MyData _data;
public HomeController(MyData data)
{
_data = data;
}
public IActionResult Index()
{
// 在同一请求中保持数据
_data.Value = "Hello, world!";
return View();
}
public IActionResult AnotherAction()
{
// 在同一请求中获取数据
var value = _data.Value;
return View();
}
}
在上述示例中,MyData
类被注册为AddScoped
,这意味着它的实例在同一请求中是唯一的。通过在Index
方法中设置_data.Value
,再在AnotherAction
方法中获取_data.Value
,可以在同一请求中保持数据。
请注意,HttpContext
是在请求过程中可用的,并且在请求结束后会被清理。因此,不能在AddScoped
之外的地方使用HttpContext
来存储数据。
上一篇:ASP.NET Core(在IIS上)PDF文件缺少最后几个字节
下一篇:ASP.NET Core,Ajax调用删除操作后不会从HTML JSON响应中重新加载Index页面(PartialView)的div内容。