MVC5 中的自定义声明 returns 无
Custom Claim in MVC5 returns nothing
我已按照此处的 SO 答案实施自定义声明:
但是,我的问题是它从来没有 return 值。这是我的实现:
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()
那么它将 return 我的 ID。
我是不是哪里漏了一步?
它是一个字符串,因此您应该使用:alert('@User.Identity.GetCustomUrl()');
注意引号,否则 'javascript' 会搜索名称为 returns 的对象。如果它本身可以包含单引号,也不要忘记在此处转义值。
我已按照此处的 SO 答案实施自定义声明:
但是,我的问题是它从来没有 return 值。这是我的实现:
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()
那么它将 return 我的 ID。
我是不是哪里漏了一步?
它是一个字符串,因此您应该使用:alert('@User.Identity.GetCustomUrl()');
注意引号,否则 'javascript' 会搜索名称为 returns 的对象。如果它本身可以包含单引号,也不要忘记在此处转义值。