【问题标题】:Check if an int property has value assigned to it coming from an HTTP request检查一个 int 属性是否具有来自 HTTP 请求的值
【发布时间】:2021-06-05 09:19:16
【问题描述】:

程序员朋友们,您好,

我有一个简单的域表示如下:

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Quote> Quotes { get; set; } = new List<Quote>();
}

public class Quote
{
    public int Id { get; set; }
    public string Text { get; set; }
    public Person Person { get; set; }  // Just a navigation property.
    public int PersonId { get; set; }   // The foreign key for Person.
}

我正在处理 ASP.NET Core 中的 PUT 端点,该端点从 HTTP 请求的正文中获取一个 Quote 对象,以更新报价文本。但是,我想确保说这句话的人不会随着文字一起改变。

当作为 JSON 传递时,对象如下所示:

{
    "id": 69,
    "text": "nice quote"
}

由于PersonId 不一定要包含在内,它以null 的形式发回,因此在与当前值比较时我必须忽略它以查看它是否不同,但 C# 编译器不会让我这样做是因为整数是不可为空的值类型,从而使 PersonId == null 成为无意义的声明。

所以我的问题是:有没有办法在 POCO 类中不使用 int? 来检查整数的“无价值”?

如果需要任何进一步的信息,请告诉我。谢谢。

【问题讨论】:

  • 如果您不想发回 PersonId - 不要这样做。创建另一种类型来表示没有 PersonId 属性的返回 Quote。
  • 我在链接的帖子中尝试了该方法,虽然它有效,但现在我在响应中发送了该布尔字段以及相关字段 LOL,这有点尴尬。无论如何,感谢您的洞察力。不过还没有尝试过@Fabio 的解决方案。

标签: c# http asp.net-core asp.net-core-webapi .net-5


【解决方案1】:

您可以检查 int 的默认值,即 0。我假设在某种数据存储中,您永远不会拥有等于 0(甚至小于 0)的人员 ID。

public void Put(Quote quote) 
{
   if (quote.PersonId == default) 
   {
      // person id is the default value of int (0)
   }
}

【讨论】:

  • 在我的情况下,这似乎是最简单的方法,但我曾在一个地方工作过,他们的 ERP 数据库中有一些客户的 ID 为负数 xD
猜你喜欢
  • 1970-01-01
  • 2012-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-02
  • 1970-01-01
  • 2023-02-14
  • 2012-01-03
相关资源
最近更新 更多