asp.net – 在global.asax中设置的用户仅在下次请求后才可用
我正在使用带有
Windows身份验证的ASP.NET MVC 4构建Intranet应用程序.在global.asax文件中,我实现了这个方法:
protected void WindowsAuthentication_OnAuthenticate(object sender,WindowsAuthenticationEventArgs args) 在这个方法中,我创建了一个新的ClaimsIdentity并设置了args.User,就像example on MSDN一样.稍后在应用程序中,在其中一个控制器中,我需要从数据库中获取一些数据.由于我已经有一个执行此操作的API操作,因此我从Controller调用该API(同步). API使用ApiController.User属性获取当前用户的声明.但是,这些声明不是我在global.asax中设置的声明.实际上,它们是在此请求之前对用户的声明. 奇怪的是(对我来说)是下次我打电话给应用程序时,新的声明到位了.所以在我的情况下,我更改后来决定哪些按钮对用户可见的声明,但只有在用户向应用程序发出另一个请求之后,才会更新这些按钮. 如何确保我在global.asax中设置的声明立即生效? 额外信息: 我没有按照每个请求设置索赔.当这个方法执行时,我检查一些事情,看看用户是否仍然有效:cookie,用户不是匿名的,用户仍然是“有效的”.后者由缓存决定 – 我保留一份仍然有效的用户列表,如果有人通过用户界面更新了他们的权限,他们将失效并在下一个请求中收到新的声明. 我已经附加了一个调试器,我看到我的代码被执行,主体获得了我希望它仍然在这个方法中的所有声明.当我到达控制器动作时,ApiController.User会在此之前提出请求.当我发出另一个请求时,将跳过身份验证方法(因为用户名现在位于缓存中),并且在控制器中ApiController.User具有正确的声明. 解决方法
您需要设置两个成员才能使其正常工作.
Thread.CurrentPrincipal = principal; HttpContext.Current.User = principal; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 在ASP.NET MVC中DRY原理实际上是什么样的?
- asp.net-mvc – ASP.NET Core中基于活动的授权
- asp.net – 什么是aspnet_Users和aspnet_Membership?我应该
- asp.net-mvc-4 – bundle(Sytem.Web.Optimization)如何为bu
- asp.net – 使用Web.config和会话变量控制网站文件夹访问?
- asp.net – Autofac实例注册的SingleInstance()能否在IIS A
- asp.net-mvc-3 – StringLength属性行为
- asp.net – 如何使用&在web.config文件
- asp.net – 如何在WCF中使用SOAP :: Lite?
- ASP.NET MVC通过ActionLink传递模型
- asp.net-mvc – MVC 3部分页面(Razor)和MVC 3视图
- Asp.Net GridView EditIndex竞争条件?
- [译]ASP.NET Core 2.0 网址重定向
- asp.net-web-api – Asp.net Web Api的基本项目模
- asp.net-mvc – 通过Gitignore递归地包含Nuget D
- AngularJS_自定义控件_笔记1
- entity-framework – ASP .Net MVC与Java的[Tran
- asp.net – monodevelop可以像没有VS2010一样进行
- asp.net – dapper缓冲区/缓存的说明
- asp.net – Glass Mapper打破了图像字段的标准值