【问题标题】:Asp MVC [Authorize] to return a Post instead of a GetAsp MVC [Authorize] 返回 Post 而不是 Get
【发布时间】:2009-07-30 13:48:56
【问题描述】:

我想在我的控制器方法上使用 [Authorize(Roles="Admin")] 标签。

如果用户不是管理员,我想将该用户返回到我的登录屏幕。 将用户返回到我的登录页面的默认行为是使用 Get url 将我的用户重新路由到“帐户/登录”。

问题是,我网站的子页面都是由 Ajax 调用刷新的部分视图,包括我的登录屏幕。

所以我的问题是: 是否可以更改下面的类以返回 post 重定向而不是 get 重定向?

public class AjaxAuthorizeAttribute : AuthorizeAttribute
{
  override public void OnAuthorization(AuthorizationContext filterContext)
  {
    base.OnAuthorization(filterContext);
    // Only do something if we are about to give a HttpUnauthorizedResult and we are in AJAX mode.
    if (filterContext.Result is HttpUnauthorizedResult && filterContext.HttpContext.Request.IsAjaxRequest())
    {
      filterContext.Result =  new RedirectResult("../Account/Login");
    }
  }
}

【问题讨论】:

    标签: asp.net-mvc post get attributes authorize


    【解决方案1】:

    显然问题似乎通过删除

    [Acceptverbs(HttpVerbs.Post)]
    

    我的帐户控制器的登录方法的属性。

    这样我们甚至不必重写 AuthorizeAttribute

    :)

    【讨论】:

    • 您仍然可以这样使用 AcceptVerbs 属性:[AcceptVerbs(HttpVerbs.Get|HttpVerbs.Post)]
    【解决方案2】:

    我在Microsoft.WebPages.PreApplicationStartCode.SetupFormsAuthentication()找到了解决方案

    只需要添加一个名为“loginUrl”的appSetting来指定登录动作:

    <add key="loginUrl" value="~/Account/LogOn"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-12
      • 2015-01-03
      • 1970-01-01
      • 2021-08-10
      • 2015-11-19
      • 1970-01-01
      • 2020-12-08
      相关资源
      最近更新 更多