我有一个带有评论的博客文章页面。
任何用户(无论是否登录)都可以在页面底部看到一个表单来发表评论。
当用户输入评论且未获得授权时,用户将被重定向到登录/注册页面。
登录后,用户将被重定向回操作,但包含评论正文的 POST 数据会丢失。
我使用 ASP.NET MVC Authorize 属性来要求对某些操作进行授权:
[AcceptVerbs(HttpVerbs.Post), Authorize]
public ActionResult Create(int blogPostID, string commentBody) {
var comment = new Comment {
Body = commentBody,
BlogPostID = blogPostID,
UserName = User.Identity.Name
}
// persist the comment and redirect to a blog post page with recently added comment
}
你怎么解决这个问题?
我认为在显示评论表单之前让用户登录是一个坏主意。
Thanks.
我可能会保存 siteId 并在会话中发表评论。然后为 Create 创建另一个不带任何参数的重载。它检查会话中是否存在这些变量 - 如果存在,则将其传递给原始的 Create 方法。
为此,您必须删除授权属性并自行执行安全检查。像这样的事情:
var user = HttpContext.User;
if (!user.Identity.IsAuthenticated)
{
Session["Comment"] = comment;
Session["SiteId"] = siteId;
return RedirectToAction("LogOn", "Account",
new { returnUrl = "/ControllerName/Create"} );
}
然后你的重载创建:
public ActionResult Create()
{
var comment = (Session["Comment"] ?? "").ToString();
int siteId = 0;
if (Session["siteId"] != null)
siteId = (int)Session["siteId"];
return Create(siteId, comment);
}
当然,这并不是那么通用,也不能处理更复杂的场景,但它是一个想法。 (希望上面的代码有效,我还没有机会测试它)。看来您可以通过操作过滤器执行类似的操作,但我没有任何示例代码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)