C#学习教程:在System.Web中为Owin使用HttpContext的替代方案ASP.NETIdentity对System.Web没有任何依赖。我有一个AuthorizeAttributefilter,我需要获取当前用户并为操作控制器添加一些属性以便稍后检索。问题是我必须使用属于System.Web的HttpContext。Owin有没有HttpContext的替代方案?公共类WebApiAuthorizeAttribute:AuthorizeAttribute{公共覆盖异步任务OnAuthorizationAsync(HttpActionContextactionContext,CancellationTokencancellationToken){GuiduserId=newGuid(HttpContext.Current.User.Identity.GetUserId());ApplicationUserManagermanager=newApplicationUserManager(newApplicationUserStore(newApplicationDbContext())){PasswordHasher=newCustomPasswordHasher()};ApplicationUseruser=awaitmanager.FindByIdAsync(userId);actionContext.Request.Properties.Add("userId",user.LegacyUserId);注意:我发现了这个问题,它似乎是重复的,但要求一个适用于NancyFx项目的解决方案,但它对我不起作用。您可以使用OwinRequestScopeContext。这正是您要寻找的。这篇文章为我提供了解决方案:WebAPI2引入了一个包含Principal属性的新RequestContext类。现在这是查找调用者身份的正确位置。这取代了以前的Thread.CurrentPrincipal和/或HttpContext.User机制。如果您正在编写代码来验证WebAPI中的调用者,这也是您要分配的内容。所以只需修改行:GuiduserId=newGuid(HttpContext.Current.User.Identity.GetUserId());通过GuiduserId=newGuid(actionContext.RequestContext.Principal.Identity.GetUserId());现在,不再需要对System.Web的引用。看完之后。在我看来,扩展AuthorizeAttribute仍然是可行的方法。但是,由于HttpContext是基于IIS的,因此我们希望从现在开始避免使用它。传入一个HttpActionContext。然后我们可以使用actionContext.Request.GetRequestContext().Principal.Identity或actionContext.RequestContext.Principal.Identity或actionContext.Request.GetOwinContext().Request.User.Identity来获取身份。这三个都会给你相同的身份对象。是的,OwinContext也是这样的。以上就是C#学习教程:替换System.Web中使用HttpContextforOwin共享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
