使用 ASP.NET Web API 以及 ASP.NET 标识 1.0,可以使用此扩展方法来检索当前登录的用户:
var id = Microsoft.AspNet.Identity.IdentityExtensions.GetUserId(User.Identity);
但在 ASP.NET 标识 2.0 alpha 中,您可以覆盖 ID 字段的类型。Microsoft给出的示例显示将此字段设置为 int。但是这个扩展方法似乎是硬编码的,即使在 alpha 中也返回一个字符串:
http://msdn.microsoft.com/en-us/library/microsoft.aspnet.identity.identityextensions.getuserid(v=vs.111).aspx
使用标识 2.0 alpha 时 ASP.NET 如何从 Web API 控制器中检索当前登录用户的 (int) 标识?
您目前必须自己手动进行转换,因为声明本质上是字符串。 我们可以提供某种通用扩展,例如User.Identity.GetUserId,它尝试从字符串-> T进行转换,这是我们正在考虑在未来版本中改进的内容。
我最终使用了:
public static class IdentityExtensions {
public static T GetUserId<T>(this IIdentity identity) where T : IConvertible {
return (T)Convert.ChangeType(identity.GetUserId(), typeof(T));
}
}
并称其为:GetUserId<int>()