0

在我在管理区域的 productcontroller 的 Create 操作中添加 Authorize 属性之前,我认为它工作正常。

[Authorize]
public ActionResult Create()
{
ViewBag.Action = "Create";
VewBag.Category = new SelectList(this.categoryCoreModel.Categories, "CategoriaKy", "CategoriaDescIT");
ViewBag.SubCategory = new SelectList(this.subCategoryCoreModel.SubCategories, "CategoriaSubKy", "CategoriaSubDescIT");
return this.View("Create", new ProductEditModel ());
}

在我看来

<div class="form">
    @using (Html.BeginForm((string)ViewBag.Action, "Product", FormMethod.Post, new { Model, enctype = "multipart/form-data" }))
    {
         ...............
         .............
 }

我的问题是,当我单击“保存”按钮时,它会重定向到另一个不存在的 URL,例如 Admin/Home。并且表单标签也丢失了。我在这里错过了什么?

编辑:成功登录后,loginpartial 视图似乎呈现了与我的产品表单混淆的表单。

  @(Html.BeginForm("LogOff", "Account", FormMethod.Post, new { id = "logoutForm" })) {
            @Html.AntiForgeryToken()
            <a href="javascript:document.getElementById('logoutForm').submit()">Log off</a>
        }

任何想法或反馈都会很棒

4

1 回答 1

1

我本来希望看到 [Authorize(Roles="SomeRoleName")] 以便您的授权可以证明用户具有该角色,因为您没有指定角色(并且您可能实际上没有登录)它会将您重定向到角色提供者指定的地方,即在 loginUrl

你在使用这样的 SimpleRoleProvider 吗?

<authentication mode="Forms">
  <forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
<roleManager enabled="true" defaultProvider="SimpleRoleProvider">
  <providers>
    <clear />
    <add name="SimpleRoleProvider" type="Models.SimpleRoleProvider, Models, Version=1.0.0.0, Culture=neutral" />
  </providers>
</roleManager>

如果是这样,那么 HttpContext.User.Identity 和/或 HttpContext.User.IsInRole 不会返回 [Authorize()] 所期望的。我建议您查看登录部分并确保您将用户设置为已登录,并且他/她具有授权锁定的角色

希望这可以帮助

于 2013-11-15T09:02:50.443 回答