0

在一些 web api 控制器中,我想访问用户,如以下答案所示:https ://stackoverflow.com/a/12705062/538962

来自答案的示例代码...

[Authorize]
public List<Product> GetProductsFromId()
{
    string username = User.Identity.Name;
    return _productService.GetProductsFromUsername(username);
}

我的场景中的 asp_net 成员表位于与运行应用程序的数据库服务器不同的数据库服务器上。应用程序的数据库有自己的 Users 表,其中的IDENTITY columnPrimary KeyUsers 表,然后其他包含 aCreatedByUserIDUpdatedByUserID列的表integers基于 IDENTITY columnusers 表中的 。

问题是,如果 CRUD 类型的操作依赖于在表中更新的用户INTEGER,那么仅访问用户名是不够的;我们仍然必须得到该用户名对应的UserID.

这可以通过另一个连接到用户表来完成,但这似乎有点笨拙。处理此问题的最佳方法是什么?

4

1 回答 1

2

从 ASP.NET Web API 的角度来看,使用成员资格提供程序和开箱即用的 FormsAuthentication 已经很笨拙了,为什么不加入呢?:) 无论如何,假设您的 Web API 仅由 Web 客户端使用并且 FA 很酷,您可以使用 FA 票证的 UserData 输入用户 ID。这样,您无需每次都通过访问数据库来获取 ID。但是您需要自己创建票证,而不是让默认的开箱即用实现为您执行此操作。然后,在 PostAuthenticateRequest 事件中,您可以从票证中读取用户 ID 并将其设置在身份中。当然,您需要使用 ID 属性为此创建自己的自定义标识,或者如果您使用的是 .NET 4.5,则可以使用 FormsIdentity 本身,但您也可以使用 NameIdentifier 声明来存储 ID。看一下这个 -ASP.NET MVC - 设置自定义 IIdentity 或 IPrincipal

于 2013-05-10T13:42:37.280 回答