如何解决在 Dotnet Core 3.1 中将数据从一个控制器传递到另一个控制器
我是整个 MVC 模式的新手,遇到以下问题:
我有 2 个控制器,PayReqController 和 PayResController。我正在尝试从 PayReqController 的一个操作访问数据到 PayResController 的另一个操作,我尝试使用 TempData
TempData["tsnpac"] = tsnpac
但它不起作用,因为我们需要在设置 tempData 后重定向到另一个控制器。还尝试使用 session Session["TSNPAC"] = "TSNPAC";
将其访问到另一个控制器,但它的值为 null。
我的场景是在 PayReqController 中,在一个操作中,我有一个值,我需要在另一个控制器中获取该值而不重定向到该控制器,因为我的用例是重定向到其他一些 URL服务。
解决方法
要在请求范围之间(不仅仅是在控制器之间)共享数据,您可以使用 ON
。
共享数据:
HttpContext.Items
并使用共享数据:
//in the first controller
HttpContext.Items.Add("person",person);
,
&
据我所知,我们可以在控制器之间共享 session 值,关于 session 为 null,可能与 session 过期时间和 ASP.NET Core 中 session 的使用有关。
要在 asp.net Core 中使用 session,Startup 必须包含:
- 任何 IDistributedCache 内存缓存。 IDistributedCache 实现用作会话的后备存储。如需更多信息,请参阅Distributed caching in ASP.NET Core。
- 在 ConfigureServices 中调用 AddSession。
- 在Configure中调用UseSession。
Startup.cs 如下:
swap(ptr1,ptr2)
通过使用上述配置,我们将会话过期时间设置为 20 分钟。
然后,在控制器中,我们可以使用以下代码来获取或设置会话中的值:
swap(&num1,&num2)
如果你想使用 session 来存储对象,你必须添加 SessionExtensions,勾选 this article。
有关使用会话的更多详细信息,请查看 Session State。
如果还是无法通过session获取到值,可以考虑将值存入缓存或数据库中。
,我尝试了以下步骤: 在 startup.cs 中,在 ConfigureServices(IServiceCollection services) 方法中`
services.AddDistributedMemoryCache();services.AddSession(options =>
{options.IdleTimeout = TimeSpan.FromMinutes(20);options.Cookie.HttpOnly = true;options.Cookie.IsEssential = true;});
In Configure(IApplicationBuilder app,IWebHostEnvironment env),
app.UseSession();In 1st Controller
string MerchantCode = "T S Nandakumar"; HttpContext.Session.SetString("Code",MerchantCode);In 2nd Controller
string codetest = HttpContext.Session.GetString("Code");`
但是在 URL 重定向之后的第二个控制器中,Getting Null value ,你能告诉我我是否按照你的方法遗漏了任何步骤吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。