小编are*_*ler的帖子

以 json 形式返回时排除某些字段

我有一个 asp.net web api 应用程序。

现在假设应用程序由一个 User 实体和一个 Post 实体组成。帖子由用户撰写,因此每个帖子实体都包含对用户实体的引用。

class Post {

    public int Id { get; set; }

    public string Title  { get; set; }

    public string Content { get; set; }

    public User User { get; set; } // Reference to the user that wrote the post
} 
Run Code Online (Sandbox Code Playgroud)

问题是当我想将帖子列表作为 Json 返回时。我不想在列表中包含帖子的作者,换句话说,我想从帖子列表中排除 User 字段。

例子:

[
    {
        "Id": 1,
        "Title": "Post A",
        "Content": "..."
    },
    {
        "Id": 2,
        "Title": "Post B",
        "Content": "..."
    }
]
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过创建一个没有 User 字段的名为 …

c# asp.net json asp.net-web-api

2
推荐指数
1
解决办法
1068
查看次数

Unity容器 - 懒惰注射

让我们说我有一个clas

class Foo : FooBase {

  public Foo(Settings settings, IDbRepository db)
    : base(settings) {
      this.db = db;
  }

  ...

}
Run Code Online (Sandbox Code Playgroud)

基本上FooBase通过构造函数接收设置并从配置文件加载一些配置.

然后我有实现IDbRepository的类MySQLRepository

class MySQLRepository : IDbRepository {

  ...

  public MySQLRepository(IConfigurationRepository config) {
    conn = new MySQLConnection(config.GetConnectionString());
  }

  ...

}
Run Code Online (Sandbox Code Playgroud)

在Program.cs我有:

Foo foo = container.Resolve<Foo>();
Run Code Online (Sandbox Code Playgroud)

问题是只有在加载了所有其他依赖项之后才调用FooBase的构造函数.但是在调用FooBase构造函数之前不会加载配置.

我的想法是创建一个IDbRepository和任何其他需要配置的接口的惰性实现.

这是一个好主意吗?我如何使用Unity容器实现它?

.net c# dependency-injection lazy-loading unity-container

2
推荐指数
1
解决办法
3949
查看次数

C#MySql驱动程序 - 异步操作

最近我开始使用C#的MySQL驱动程序 https://github.com/mysql/mysql-connector-net

使用async/await我尝试在并行任务中运行简单的选择查询

这基本上是代码的外观:

    private async Task<List<string>> RunQueryA()
    {
        List<string> lst = new List<string>();

        using (MySqlConnection conn = new MySqlConnection(someConnectionString))
        using (MySqlCommand cmd = conn.CreateCommand())
        {
            await conn.OpenAsync();
            cmd.CommandText = "select someField from someTable ...";

            using (var reader = await cmd.ExecuteReaderAsync())
            {
                // ...
            }
        }

        return lst;
    }

    private async Task<List<string>> RunQueryB()
    {
        List<string> lst = new List<string>();

        using (MySqlConnection conn = new MySqlConnection(someConnectionString))
        using (MySqlCommand cmd = conn.CreateCommand())
        {
            await conn.OpenAsync();
            cmd.CommandText = "select someField2 from someTable2 ..."; …
Run Code Online (Sandbox Code Playgroud)

c# mysql asynchronous

2
推荐指数
1
解决办法
4368
查看次数

Kafka消费群体和分区

我很难掌握分区和客户群之间的关系。

想法本身很明确,推送到某个主题的每条消息都会复制到其所有分区中,对吗?这样,如果两个不同的客户端连接到同一主题的两个不同的分区,则它们应该使用并提交相同的消息而不会互相干扰。

据我所知,消费者组是对分区概念的抽象,它们本质上是在承诺同一件事,连接到同一主题的两个不同消费者组的两个不同的客户端应该使用并提交相同的消息而不会互相干扰。

因此,正如我所看到的,应该遵循的条件是,连接到同一使用者组的两个客户端将使用同一分区中的消息,而连接到两个使用者组的两个客户端将使用两个不同的分区中的消息(假设至少有两个分区),因为否则,消费者组的概念与分区的概念不符。

但是,当我在C#中运行一个简单的消费者客户端时

string group = Console.ReadLine();

            var config = new Dictionary<string, object>()
            {
                { "group.id", group },
                { "bootstrap.servers", "10.0.0.3:9092" },
                { "enable.auto.commit", true },
                { "auto.commit.interval.ms", 1000 }
            };

            using (var consumer = new Consumer<Null, string>(config, null, new StringDeserializer(Encoding.UTF8)))
            {
                consumer.Subscribe(new List<string>() { { "myFirstTopic" } });
                while (true)
                {
                    Message<Null, string> msg;
                    if (!consumer.Consume(out msg, TimeSpan.FromMilliseconds(100)))
                    {
                        continue;
                    }

                    Console.WriteLine($"Topic: {msg.Topic} Partition: {msg.Partition} Offset: {msg.Offset} {msg.Value}");
                }
            }
Run Code Online (Sandbox Code Playgroud)

我得到这个结果:

在此处输入图片说明

同一消费者组从两个不同的分区进行消费。当我运行两个从不同消费者组(a和b)消费的客户端时,我得到以下信息:

在此处输入图片说明

两个不同的消费者组从相似的分区进行消费。

我不明白它是如何发生的,这是否意味着消费者群体的想法和分区的想法相互矛盾?

如果同一消息出现在同一分区下的两个不同的使用者组中,这是否意味着同一消息两次插入同一分区?

请帮助我理解。

c# apache-kafka

2
推荐指数
1
解决办法
2316
查看次数

Kubernetes Go API

我对kubernetes的golang API有一些疑问.

  1. 我应该使用哪一个?k8s.io/client-go或k8s.io/kubernetes/pkg/client?有什么不同?

  2. 我想得到所有pod的列表,然后听取添加/更新/删除事件,使用api.Pods("")之间的区别是什么.观察方法和使用线人?

  3. 我正在使用集群内部的API,如何获取我当前所在节点的名称?它只是机器的主机名吗?

go kubernetes

2
推荐指数
1
解决办法
155
查看次数

使用队列代替主题和订阅有什么意义吗?

我是 Azure 服务总线的新手,我正在研究它是否可以取代我们的 RabbitMQ 基础设施。

不管怎样,我想知道使用队列是否有意义?如果主题和订阅提供相同的功能+提供独立于多个源进行消费的灵活性。

例如,如果现在我的设置只有一个消费者组(可能是多个消费者,但都共享相同的消息队列),那么我可以使用具有单个订阅的主题。

队列有什么意义?它是否对主题和订阅提供某种优化?

azure azureservicebus azure-servicebus-topics

2
推荐指数
1
解决办法
620
查看次数

通过 Microsoft Graph API 创建新的 AD B2C 用户

我决定使用Microsoft.Graph.NET SDK,而不是使用带有手动 HTTP 请求的旧 Azure Graph API。

问题是当我尝试使用一些电子邮件创建新用户时,例如 areller@gmail.com

var req = _client.Users.Request();
var userRes = req.AddAsync(new User()
{
    AccountEnabled = true,
    DisplayName = user.Email,
    MailNickname = user.GivenName,
    GivenName = user.GivenName,
    Surname = user.SurName,
    UserPrincipalName = user.Email,
    PasswordProfile = new PasswordProfile()
    {
        Password = user.Password,
        ForceChangePasswordNextSignIn = true
    },
    PasswordPolicies = "DisablePasswordExpiration, DisableStrongPassword",
    Country = user.Country,
    City = user.City,
    PostalCode = user.ZipCode
}).Result;
Run Code Online (Sandbox Code Playgroud)

我收到一个异常,显示“属性 userPrincipalName 无效” 在此处输入图片说明

当我将租户用作域的电子邮件时,我只能创建用户,例如,areller@mytenant.onmicrosoft.com 但这不是我需要的。我需要能够以编程方式创建实际的外部用户。

使用 Azure Graph API 它可以工作 有没有办法让它与 Microsoft Graph API …

.net azure-ad-b2c microsoft-graph-api

2
推荐指数
2
解决办法
2466
查看次数

LINQ to SQL实体到对象的转换

如您所知,LINQ to SQL生成自己的实体.我尝试从数据库中获取数据并将其放在我自己的实体中,我创建的类.

当我这样做时:

        AppData.MyDBDataContext context = new AppData.MyDBDataContext();
        List<User> users = (from user in context.Users.Select(x => new User
        {
            Id = x.Id,
            Name = x.Name,
            Password = x.Password
        }) where user.Password == "123456" select user).ToList();
Run Code Online (Sandbox Code Playgroud)

它有效(User是我创建的一个类).但是当我尝试概括和构建一个强制转换函数时:

User castToUser (DataAccess.AppData.User linqEntity)
{
    return new User
    {
        Id = linqEntity.Id,
        Name = linqEntity.Name,
        Password = linqEntity.Password
    };
}
Run Code Online (Sandbox Code Playgroud)

(DataAccess.AppData.User是LINQ to SQL生成的实体).

    AppData.MyDBDataContext context = new AppData.MyDBDataContext();
    List<User> users = (from user in context.Users.Select(x => castToUser(x)) where user.Password == "123456" …
Run Code Online (Sandbox Code Playgroud)

.net c# linq linq-to-sql

0
推荐指数
1
解决办法
123
查看次数