首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在System.Web中使用HttpContext的替代方案

在System.Web中使用HttpContext的替代方案
EN

Stack Overflow用户
提问于 2014-07-04 18:58:35
回答 3查看 25.6K关注 0票数 23

ASP.NET身份验证现在基于OWIN中间件,可以在任何基于OWIN的主机上使用。ASP.NET Identity 不依赖于System.Web

我有一个AuthorizeAttribute过滤器,我需要在其中获取当前用户并添加一些属性,以便稍后由操作控制器检索。

问题是我必须使用属于System.Web的HttpContext。对于Owin,有没有HttpContext的替代品?

public class WebApiAuthorizeAttribute : AuthorizeAttribute 
{
    public override async Task OnAuthorizationAsync(HttpActionContext actionContext, CancellationToken cancellationToken)
    {
        base.OnAuthorization(actionContext);

        Guid userId = new Guid(HttpContext.Current.User.Identity.GetUserId());

        ApplicationUserManager manager = new ApplicationUserManager(new ApplicationUserStore(new ApplicationDbContext())) { PasswordHasher = new CustomPasswordHasher() };
        ApplicationUser user = await manager.FindByIdAsync(userId);

        actionContext.Request.Properties.Add("userId", user.LegacyUserId);
    }
}

注意:我找到了this question,它看起来是重复的,但要求为NancyFx项目工作的解决方案,这对我来说是无效的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-07 20:39:39

This article给了我一个解决方案:

Web API2引入了一个新的RequestContext类,其中包含一个主体属性。现在,这是查找调用者身份的适当位置。这取代了Thread.CurrentPrincipal和/或HttpContext.User的现有机制。如果您正在编写代码在Web API中对调用者进行身份验证,这也是您需要分配的内容。

所以只需要修改这一行:

Guid userId = new Guid(HttpContext.Current.User.Identity.GetUserId());

通过

Guid userId = new Guid(actionContext.RequestContext.Principal.Identity.GetUserId());

现在,不再需要对System.Web的引用。

票数 9
EN

Stack Overflow用户

发布于 2014-07-04 19:02:54

您可以使用OwinRequestScopeContext。它做的就是你想要的。

票数 9
EN

Stack Overflow用户

发布于 2014-11-26 02:17:20

在阅读了this之后。在我看来,扩展AuthorizeAttribute仍然是大势所趋。但是,由于HttpContext是基于IIS的,我们希望从现在开始避免使用它。

传入了一个HttpActionContext。然后我们就可以使用

actionContext.Request.GetRequestContext().Principal.Identity

actionContext.RequestContext.Principal.Identity

actionContext.Request.GetOwinContext().Request.User.Identity来获取身份。这三个都将为您提供相同的身份对象。

是的,OwinContext也可以通过这种方式使用。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24572794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档