我希望用户在使用我的网站之前完成他们的个人资料。所以准备了IAuthorizationFilter的全局过滤器 所以他们不会通过任何网址传递这个。
public void OnAuthorization(AuthorizationContext filterContext)
{
// make filter context global
_filterContext = filterContext;
if (!IsUserAuthenticated())
return;
if (IsRequestedPageAllowed())
return;
var forcedUrl = GetForcedUrl();
if (!forcedUrl.IsEmpty())
{
_filterContext.Result = new RedirectResult(forcedUrl);
}
}
private string GetForcedUrl()
{
return (string) _filterContext.HttpContext.Session?["ForcedUrl"];
}
我有这个允许的页面。
_allowedPages = new Dictionary<string, object>(StringComparer.InvariantCultureIgnoreCase)
{
// Controller: Account
// List of Actions: LogOff
{"Account", new List<string>() {"LogOff"}}
};
强制网址会话将在第一次注册时设置为我的控制器。仅供参考,除了完成确认电子邮件等个人资料外,还有其他强制网址。
问题: 如果网址不在允许的页面上,则过滤器进入无限循环。我的意思是“new RedirectResult(forcedUrl)” 正在一遍又一遍地抓住自己。但我不知道Url在允许的页面列表中是什么。
请帮帮我..