我在这里按照SO回答来实现自定义声明:
How to extend available properties of User.Identity
但是,我的问题是它永远不会返回值。这是我的实施:
using System.Security.Claims;
using System.Security.Principal;
namespace Events.Extensions
{
public static class IdentityExtensions
{
public static string GetCustomUrl(this IIdentity identity)
{
var claim = ((ClaimsIdentity)identity).FindFirst("CustomUrl");
// Test for null to avoid issues during local testing
return (claim != null) ? claim.Value : string.Empty;
}
}
}
namespace Events.Models
{
public class Member : IdentityUser
{
public string CustomUrl { get; set; }
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<Member> manager)
{
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
userIdentity.AddClaim(new Claim("CustomUrl", this.CustomUrl));
return userIdentity;
}
}
}
现在我尝试在视图中调用它进行测试:
<script>alert(@User.Identity.GetCustomUrl());</script>
值始终没有,但是如果我要更改为@User.Identity.GetUserId()
那么它会返回我的身份。
我错过了某个地方的一步吗?
答案 0 :(得分:1)
这是一个字符串,所以你应该使用:alert('@User.Identity.GetCustomUrl()');
注意引号,因为否则'javascript'会搜索一个带有它返回名称的对象。如果它本身可以包含单引号,也不要忘记在这里转义值。