3

为了在使用控制器方法上的 [Authorize] 属性后保留发布数据,然后将用户重定向到登录页面,然后在成功验证后将用户重定向到他们打算去的地方——这将如何完成? 默认情况下不中继原始表单提交。对之前帖子的回复说:

您需要将表单值和 RedirectUrl 序列化到隐藏字段。身份验证后,反序列化隐藏字段中的数据并根据 RedirectUrl 的值进行重定向。您将需要一个自定义 Authorize 类来处理此问题。

我的问题是——有什么例子可以进一步指出我正确的方向吗?是的,我可以将 [Serialize] 标记添加到控制器类,但我不知道创建自定义 Authorize 类有什么帮助?我在网上看到很多关于创建自定义 Authorize 类的材料,但是反序列化在哪里进行呢?如果你能更深一层或两层,那将有很大帮助。我是新手。

(我会评论之前的帖子,但我是该网站的新手,没有积累足够的积分。我也会放一个指向其他帖子的链接,但它说新用户也不能显示链接!)

4

1 回答 1

2

您可以创建一个自定义授权属性,将表单发布的值存储在 Session 字典中,然后在授权完成后,您可以从 Session 字典中重新设置值。
这是一个例子:

public class CustomAuth:AuthorizeAttribute
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
      var form = filterContext.HttpContext.Request.Form;
      if (form.HasKeys()) {
       foreach(var key in form.AllKeys)
       {
         filterContext.HttpContext.Session[key]= form[key];
       }
      }
      base.OnAuthorization(filterContext);
    }
}

如您所见,在授权之前,所有表单值都存储在会话中。
现在授权完成后,您可以恢复所有值。

[CustomAuth()]
public ActionResult Admin()
{
   // supposing you had a from input with the name "Name"
   string Name = Session["Name"] ?? string.Empty;

   return View();
}
于 2009-05-29T06:27:14.433 回答