如何在ASP.NET Core重定向时向ASP Classic传递登录请求数据?
解决方案:模拟表单自动提交传递POST数据
Redirect方法本质是返回3xx重定向响应,浏览器会自动发起GET请求访问目标地址,因此无法携带原POST请求中的用户名、密码等数据。要解决这个问题,需要模拟Public站点的表单提交逻辑,通过后端生成一个自动提交的临时页面,将数据以POST方式发送到OldProvider的Login.asp。
实现步骤
1. 在.NET 8的Controller中调整跳转逻辑
不再使用Redirect,而是返回一个专门用于自动提交的View,并将需要传递的参数传入View:
public IActionResult RedirectToOldLogin(string username, string password) { // 将需要传递的参数传入View ViewData["Username"] = username; ViewData["Password"] = password; // 如果有其他需要传递的字段,同理添加到ViewData中 return View("AutoPostToOldLogin"); }
2. 创建自动提交的View页面
新建一个名为AutoPostToOldLogin.cshtml的View文件,内容如下:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>跳转中...</title> <script> // 页面加载完成后自动提交表单 window.addEventListener('load', function() { document.getElementById('oldLoginForm').submit(); }); </script> </head> <body> <form id="oldLoginForm" action="@Configuration["PortalUrl"]/Login.asp" method="POST"> <!-- 隐藏字段传递用户名、密码,名称要和OldProvider的Login.asp接收的字段完全一致 --> <input type="hidden" name="username" value="@ViewData["Username"]" /> <input type="hidden" name="password" value="@ViewData["Password"]" /> <!-- 其他需要传递的字段在此添加 --> <p>正在跳转,请稍候...如果长时间未跳转,请点击<button type="submit">手动提交</button></p> </form> </body> </html>
关键说明
- 这个方案完全模拟了Public站点的表单提交流程,OldProvider的
Login.asp可以像处理原表单请求一样读取POST参数,无需修改ASP Classic代码。 - 确保所有字段的
name属性与Public、OldProvider的表单字段完全一致(你已确认这一点,无需额外调整)。 - 为了安全,务必确保站点使用HTTPS协议,避免明文传递敏感数据。
内容的提问来源于stack exchange,提问作者Musical Coder
相关产品推荐
相关产品推荐

