2017-06-15 134 views
0

我正在使用MVC 5 for ASP.NET。MVC 5授权属性

我想创建一个自定义授权属性。如果存在会话变量,则使用OpenId将用户验证到我的应用程序。我已将[OpenIdAuthorize]添加到我的控制器。当我在登录后查看它们时,我会在我的应用程序中弹回到/ openid/index。会话变量存在。我添加了断点,但他们从未达到过。

public class OpenIdAuthorizeAttribute : System.Web.Mvc.AuthorizeAttribute 
{ 

    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     if (httpContext.Session["FriendlyEmail"] == null) 
      return false; 
     else 
      return true; 
    } 

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
    { 
     if(filterContext.HttpContext.Session["FriendlyEmail"] == null) 
      filterContext.Result = new RedirectResult("/openid/index"); 
    } 
} 

这里是我的控制器:

[OpenIdAuthorize] 
public class RuleSetController : Controller 
+0

你覆盖'AuthorizeCore'功能? –

+0

请看我更新的答案。问题依然存在。 –

+1

'AuthorizeCore'函数的任何断点是否受到影响? –

回答

0

这里是我的解决方案:

  1. 不要在filter.config输入任何内容。
  2. 在web.config,输入验证码:(参照认证模式>形成https://support.microsoft.com/en-us/help/301240/how-to-implement-forms-based-authentication-in-your-asp.net-application-by-using-c-.net
  3. 调整AuthorizeAttribute仅覆盖AuthorizeCore。不覆盖其他方法。

    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
        if (httpContext.Session["FriendlyEmail"] == null) 
         return false; 
        else 
         return true; 
    }