C# 无法将数据直接拉至查看MVC索赔标识
您好,我无法将声明标识值直接传递到视图中。我创建了一个Security.cs文件,希望通过视图中的值进行访问。例如,我希望返回@CurrentUser.DisplayName,但遗憾的是@CurrentUser不存在是当前上下文。老实说,这让我很困惑,有什么想法吗 也可以作为编辑:我可以将值拉到我的控制器上,没有问题 下面是我的安全控制器: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) {
[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
{
}
}