C# 无法将数据直接拉至查看MVC索赔标识

C# 无法将数据直接拉至查看MVC索赔标识,c#,security,model-view-controller,claims-based-identity,claims,C#,Security,Model View Controller,Claims Based Identity,Claims,您好,我无法将声明标识值直接传递到视图中。我创建了一个Security.cs文件,希望通过视图中的值进行访问。例如,我希望返回@CurrentUser.DisplayName,但遗憾的是@CurrentUser不存在是当前上下文。老实说,这让我很困惑,有什么想法吗 也可以作为编辑:我可以将值拉到我的控制器上,没有问题 下面是我的安全控制器: [HttpPost] public ActionResult CheckUser(string returnURL) {

您好,我无法将声明标识值直接传递到视图中。我创建了一个Security.cs文件,希望通过视图中的值进行访问。例如,我希望返回@CurrentUser.DisplayName,但遗憾的是@CurrentUser不存在是当前上下文。老实说,这让我很困惑,有什么想法吗

也可以作为编辑:我可以将值拉到我的控制器上,没有问题

下面是我的安全控制器:

 [HttpPost]
    public ActionResult CheckUser(string returnURL)
    {
        ViewBag.ReturnURL = returnURL;
        GRATT.BLL.GratManager gm = new GRATT.BLL.GratManager();

    string username = Request.Form["username"];
    string password = Request.Form["password"];

    GRATT.DTO.AppUser au = gm.GetUser(username, password);

    if (au != null)
    {
        if (Membership.ValidateUser(Request.Form["username"], Request.Form["password"]))
        {
            ClaimsIdentity identity = new ClaimsIdentity(new[]
        {
            new Claim("Username", au.Username.ToString()),
            new Claim("UserId", au.UserId.ToString()),
            new Claim("DisplayName", (au.Name.Forename ?? "") +" "+ (au.Name.Surname ?? "")),
            new Claim("SiteCode", au.Site.ToLower().ToString())
        }, "GratAuditTool_Authentication");


            foreach (GRATT.DTO.UserRole r in au.Roles)
            {
                identity.AddClaim(new Claim("Role", r.Role.Name));
            }


            var ctx = Request.GetOwinContext();
            var authManager = ctx.Authentication;


            authManager.SignIn(identity);
            return RedirectToAction("Index", "Home");
        }


    }
    return RedirectToAction("Login", "Security");
}
下面是我的Security.cs文件:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Security.Claims;
using System.Web.Mvc;

namespace GrattAuditTool.UI
{
    public class GratAuditToolClaimsPrincipal : ClaimsPrincipal
    {
        public GratAuditToolClaimsPrincipal(ClaimsPrincipal p) : base(p)
        {

    }
    public string DisplayName
    {
        get
        {
            return FindFirst("DisplayName").Value;
        }
    }
    public string UserID
    {
        get
        {
            return FindFirst("UserID").Value;
        }
    }
    public string Initials
    {
        get
        {
            return FindFirst("Initials").Value;
        }
    }
    public Boolean IsAdmin
    {
        get
        {
            return Convert.ToBoolean(FindFirst("Admin").Value);
        }
    }

    public string SiteCode
    {
        get
        {
            return FindFirst("SiteCode").Value;
        }
    }
    public List<string> Roles
    {
        get
        {
            List<string> roles = new List<string>();
            foreach (string s in FindAll("Role").Select(x => x.Value))
            {
                roles.Add(s);
            }
            return roles;
        }
    }

}
public abstract class GratAuditToolController : Controller
{
    public GratAuditToolClaimsPrincipal CurrentUser
    {
        get
        {
            return new GratAuditToolClaimsPrincipal(User as ClaimsPrincipal);
        }
    }
}
public abstract class GratAuditToolViewPage<TModel> : WebViewPage<TModel>
{
    public GratAuditToolClaimsPrincipal CurrentUser
    {
        get
        {
            return new GratAuditToolClaimsPrincipal(User as ClaimsPrincipal);
        }
    }
}
public abstract class GratAuditToolViewPage : GratAuditToolViewPage<dynamic>
{

}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.Security.Claims;
使用System.Web.Mvc;
名称空间GrattAuditTool.UI
{
公共类GratAuditToolClaimsPrincipal:ClaimsPrincipal
{
公共GratAuditToolClaimsPrincipal(ClaimsPrincipal p):基础(p)
{
}
公共字符串显示名
{
得到
{
返回FindFirst(“DisplayName”).Value;
}
}
公共字符串用户ID
{
得到
{
返回FindFirst(“UserID”).Value;
}
}
公共字符串首字母
{
得到
{
返回FindFirst(“缩写”)。值;
}
}
公共布尔IsAdmin
{
得到
{
返回Convert.ToBoolean(FindFirst(“Admin”).Value);
}
}
公共字符串站点代码
{
得到
{
返回FindFirst(“站点代码”)。值;
}
}
公共列表角色
{
得到
{
列表角色=新列表();
foreach(FindAll(“角色”)中的字符串s.Select(x=>x.Value))
{
角色。添加;
}
返回角色;
}
}
}
公共抽象类GratAuditToolController:控制器
{
公共GratAuditToolClaimsPrincipal当前用户
{
得到
{
返回新的GratAuditToolClaimsPrincipal(用户作为ClaimsPrincipal);
}
}
}
公共抽象类GratAuditToolViewPage:WebViewPage
{
公共GratAuditToolClaimsPrincipal当前用户
{
得到
{
返回新的GratAuditToolClaimsPrincipal(用户作为ClaimsPrincipal);
}
}
}
公共抽象类GratAuditToolViewPage:GratAuditToolViewPage
{
}
}