【问题标题】:How can i extend downloading of personal data in ASP.NET Core Mvc?如何在 ASP.NET Core Mvc 中扩展个人数据的下载?
【发布时间】:2020-10-25 19:47:55
【问题描述】:

Mvc Core 的默认“下载个人数据”操作会这样创建一个带有个人数据的 json

    var personalData = new Dictionary<string, string>();
    var personalDataProps = typeof(IdentityUser).GetProperties().Where(
                    prop => Attribute.IsDefined(prop, typeof(PersonalDataAttribute))); 

并序列化personalData字典

    foreach (var p in personalDataProps)
        personalData.Add(p.Name, p.GetValue(user)?.ToString() ?? "null");

为了扩展Identity User 属性,我创建了第二个UserData 表,其中包含one to one relationship,就像这样

public class UserData
{
    [Key, ForeignKey("IdentityUser")]
    public string UserId { get; set; }
    public IdentityUser IdentityUser { get; set; }

    [PersonalData]
    public string CompanyName { get; set; }

    [PersonalData]
    public string WebSite { get; set; }
}

如何将UserData 的属性添加到personalData 字典中?

我已经尝试了以下

    var userDataProps = typeof(Models.UserData).GetProperties().Where(
        prop => Attribute.IsDefined(prop, typeof(PersonalDataAttribute)));
    foreach (var p in userDataProps)
        personalData.Add(p.Name, p.GetValue(user)?.ToString() ?? "null");

但我在最后一行得到TargetException: Object does not match target type.

【问题讨论】:

  • 你是如何定义user的?这个错误信息表示user中的数据与UserData不匹配。

标签: c# asp.net-core-mvc asp.net-core-3.1


【解决方案1】:

这是一个工作演示:

var user = new UserData()
{
    UserId = "1",
    WebSite = "website1",
    CompanyName = "company1",
    IdentityUser = new IdentityUser()
    {
        Id = "001",
        UserName = "aaa"
    }
};
var personalData = new Dictionary<string, string>();
var personalDataProps = typeof(IdentityUser).GetProperties().Where(
                prop => Attribute.IsDefined(prop, typeof(PersonalDataAttribute)));
foreach (var p in personalDataProps)
    personalData.Add(p.Name, p.GetValue(user.IdentityUser)?.ToString() ?? "null");

var userDataProps = typeof(UserData).GetProperties().Where(
                prop => Attribute.IsDefined(prop, typeof(PersonalDataAttribute)));
        
foreach (var p in userDataProps)
    personalData.Add(p.Name, p.GetValue(user)?.ToString() ?? "null");

结果:

【讨论】:

    猜你喜欢
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    • 2020-02-07
    • 2019-07-02
    • 1970-01-01
    相关资源
    最近更新 更多