相关疑难解决方法(0)

ASP.NET(OWIN)标识:如何从Web API控制器获取UserID?

(使用VS2013 RTW,ASP.NET MVC5)

我在使用ASP.NET标识时看到了很多关于如何向ApplicationUser类(和表)添加属性的文档.但是我没有看到任何关于如何通过外键将内容映射到ApplicationUser表的单独表格的文档.

我已经成功地派生了我自己的Microsoft.AspNet.Identity.EntityFramework.IdentityDbContext,现在我自己的"UserPreferences"表与我的SQL Server数据库中的各种"AspNet*"表共存.但我不清楚获取当前用户ID的最佳方法,以便在"UserPreferences"表中写入新行.请注意,该项目是ASP.NET MVC,但我已添加(并且正在使用)Web API控制器.

我有一个有效的解决方案,它是:

            var uman = new Microsoft.AspNet.Identity.UserManager<Microsoft.AspNet.Identity.EntityFramework.IdentityUser>(new Microsoft.AspNet.Identity.EntityFramework.UserStore<Microsoft.AspNet.Identity.EntityFramework.IdentityUser>(new App1.Data.App1DbContext()));

            var uident = User.Identity;

            var userobject = uman.FindByNameAsync(uident.Name);

            var userid = userobject.Result.Id;
            // (Perform new row creation including the userid we just looked up
Run Code Online (Sandbox Code Playgroud)

考虑到AspNetUsers表(由Identity框架定义)包含以下字段:

-id (PK, nvarchar(128) - seems to contain a GUID, not sure why not an autoincrement integer, but I assume there are reasons for this)
-Username (nvarchar(max))
-PasswordHash (nvarchar(max))
-SecurityStamp (nvarchar(max))
Run Code Online (Sandbox Code Playgroud)

我认为id字段(不是用户名)是此表中引用的正确字段.(我当时认为用户可能会更改他/她的用户名,然后其他人就可以假设其他用户的用户名,这就是为什么两个字段都可能存在的原因.)那么,我需要获取当前用户的存储空间ID. "UserPreferences"表,这是上面的代码所做的.但是,进行此查找似乎效率低下.

重要的一点是,在System.Web.Mvc.Controller的上下文中,我可以这样做:

User.Identity.GetUserId()
(Runtime type of User.Identity: System.Security.Principal.GenericIdentity) …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc asp.net-web-api owin visual-studio-2013 asp.net-identity

45
推荐指数
3
解决办法
7万
查看次数

拒绝令牌请求时自定义OWIN/OAuth HTTP状态代码

我派生的OAuthAuthorizationServerProvider是为了验证客户端和资源所有者.

当我验证资源所有者时,我发现他们的凭据无效,我打电话context.Rejected(),HTTP响应附带HTTP/400错误请求状态代码,而我希望HTTP/401未经授权.

如何自定义OAuthAuthorizationServerProvider响应HTTP状态代码?

.net c# http oauth owin

13
推荐指数
1
解决办法
7308
查看次数