C# ASP.NET Core-授权属性登录重定向后保留POST数据

C# ASP.NET Core-授权属性登录重定向后保留POST数据,c#,authentication,asp.net-core,asp.net-core-middleware,C#,Authentication,Asp.net Core,Asp.net Core Middleware,这基本上与这个问题相同: 除了7年前没有人问过它,它是关于ASP.NET核心的,这是非常不同的。我使用[Authorize]属性来执行最基本的访问身份验证,实际上只是为了检查是否有用户登录。如果没有,则会将它们踢回登录页面。这是服务设置 services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) .AddCookie(选项=> { options.Cookie.Name=“loginId”; });

这基本上与这个问题相同: 除了7年前没有人问过它,它是关于ASP.NET核心的,这是非常不同的。我使用
[Authorize]
属性来执行最基本的访问身份验证,实际上只是为了检查是否有用户登录。如果没有,则会将它们踢回登录页面。这是服务设置

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(选项=>
{
options.Cookie.Name=“loginId”;
});
services.configureapplicationcokie(options=>options.LoginPath=“/Account/Logout”);
这是我的注销操作


[HttpGet]
[异名]
公共异步任务注销(字符串returnUrl=“/cgi-s/admin.cgi”)
{
等待HttpContext.SignOutAsync();
if(HttpContext.Request.Cookies.TryGetValue(“loginId”,out string loginId))
{
User auth=_context.Users.Where(a=>a.LoginId.Equals(LoginId)).FirstOrDefault();
如果(auth!=null)
{
auth.LoginId=string.Empty;
wait_context.SaveChangesAsync();
}
}
返回重定向(“/Account/Login?returnUrl=“+returnUrl”);
}
现在,我只是使用带有返回url字符串的默认行为,在成功登录后返回尝试的页面。是否有一种方法可以设置此设置,以便同时保留POST数据

我尝试了两种不同的方法,比如一个自定义中间件,它存储post数据,然后在登录时检索这些数据,但我没有找到任何在之后没有发现安全漏洞的方法

有没有一个简单的方法可以做到这一点,我只是错过了

谢谢


请忽略注销操作中出现的奇怪情况。我们是一个有20年历史的Perl CGI站点上的两人团队,慢慢过渡到.NET,同时努力跟上新功能和错误修复,所以当我们在IIS上使用Postgres运行Perl CGI和一些.NET代码时,一切都很奇怪。希望我们最终能完成所有的转换。

您尝试过httpContext.Request.enablebuffer吗

请在此处查看此问题,并务必查看评论:


这不符合你的需要。链接中提供的方法不适用于保存不同模型的提交数据,您无法确保获得正确的模型数据。@XueliChen同意。我不知道该怎么办。目前,我们已经回避了这个问题,尝试让所有不是多部分或不安全的内容都得到请求,而不是POST请求,但这并不是真正的解决方案。这看起来真的像是.NETCore的一个失败,因为没有解决方案。
 httpContext.Request.EnableBuffering();
 using(StreamReader streamReader = new StreamReader(httpContext.Request.Body, 
 ...,leaveOpen: true))
{

  //Do something here:


   httpContext.Request.Body.Position = 0;
 }