[英]Problem when trying to submit form as a not authorized user
对不起,标题,但我不知道如何用一句话来解释。 我对表格有看法:
@using (Html.BeginForm("AddComment", "Restaurants"))
{
@Html.TextBoxFor(c => c.NewComment.Body)
@Html.HiddenFor(m => m.Restaurant.Id)
<button type="submit">Add comment</button>
}
在Restaurantss控制器中执行AddComment Action:
public ActionResult AddComment(RestaurantViewModel model, Comment newComment)
{
var userId = User.Identity.GetUserId();
var user = _context.Users.FirstOrDefault(u => u.Id == userId);
newComment.RestaurantId = model.Restaurant.Id;
newComment.AuthorId = Guid.Parse(userId);
newComment.AuthorName = user.UserName;
newComment.DateTime = DateTime.Now;
_context.Comments.Add(newComment);
_context.SaveChanges();
return RedirectToAction("Details", "Restaurants", new { id = model.Restaurant.Id});
}
我添加了授权过滤器:
filters.Add(new AuthorizeAttribute());
当我尝试以未登录用户的身份提交表单时,它会将我重定向到登录页面。 如果我在该页面上登录,它将调用AddComment
Action,但会将参数Model.Restaurant
和NewComment.Body
为null。 如何修复它,因此在我登录时,它会将我重定向到填充了TextBox的前一页,或者仅调用AddComment
但传递正确的参数值。
没有内置的方法可以做到这一点。 原因是,这不是“做事的方式”。 如果您的表单具有受保护的POST操作,则还应使相应的GET页面仅经过身份验证。
尝试删除此行:
filters.Add(new AuthorizeAttribute());
并将符号[Authorize]
添加到您的方法中,例如:
[Authorize]
public ActionResult AddComment(RestaurantViewModel model, Comment newComment)
{
var userId = User.Identity.GetUserId();
var user = _context.Users.FirstOrDefault(u => u.Id == userId);
newComment.RestaurantId = model.Restaurant.Id;
newComment.AuthorId = Guid.Parse(userId);
newComment.AuthorName = user.UserName;
newComment.DateTime = DateTime.Now;
_context.Comments.Add(newComment);
_context.SaveChanges();
return RedirectToAction("Details", "Restaurants", new { id = model.Restaurant.Id});
}
我不建议在最简单的情况下进行此操作。 您可以将表单更改为使用get
而不是post
:
@using (Html.BeginForm("AddComment", "Restaurants", FormMethod.Get))
{
@Html.TextBoxFor(c => c.NewComment.Body)
@Html.HiddenFor(m => m.Restaurant.Id)
<button type="submit">Add comment</button>
}
注意事项:
AddComment
具有HttpPost
属性,则必须将其删除。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.