【发布时间】:2016-12-29 07:29:20
【问题描述】:
我们有一个动作过滤器,ActionAuthorizationFilterAttribute,它在其 OnActionExecuting 方法中执行一些授权测试(从会话中获取其权限,稍后会详细介绍),如果测试没问题,它只是返回,如果没有,它会在上下文的 Result 属性上设置 ForbidResult。到现在为止还挺好。但是我们有一种情况,会话在某个空闲时间段后为权限返回 null,我们需要将请求路径设置为 "/",而不是用户手动执行此操作,所以例如,如果用户在会话结束后尝试访问某个 url,例如http://mydomain/mywebapp/someurl,该方法应该将他返回到http://mydomain/mywebapp/,并且应用程序将再次启动其会话初始化内容。这在手动执行此操作时有效,但在该方法中不起作用。这是该方法的代码:
public override void OnActionExecuting(ActionExecutingContext context)
{
var path = context.HttpContext.Request.Path.Value.Trim().ToLower();
var session = context.HttpContext.Session;
var permittedUrls = session.GetJson<List<string>>(SesstionStateKeys.PermittedUrls);
if (permittedUrls == null)
{
context.HttpContext.Request.Path = "/";
return;
}
if (permittedUrls.Any(url => path.Contains(url.Trim().ToLower())))
{
return;
}
context.Result = new ForbidResult(); //new UnauthorizedResult();
base.OnActionExecuting(context);
}
【问题讨论】:
标签: c# asp.net-web-api asp.net-core windows-authentication action-filter