MVC5中的自定义声明不返回任何内容

时间:2016-02-07 16:39:07

标签: c# asp.net-mvc-5 asp.net-identity

我在这里按照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()那么它会返回我的身份。

我错过了某个地方的一步吗?

1 个答案:

答案 0 :(得分:1)

这是一个字符串,所以你应该使用:alert('@User.Identity.GetCustomUrl()');注意引号,因为否则'javascript'会搜索一个带有它返回名称的对象。如果它本身可以包含单引号,也不要忘记在这里转义值。