【问题标题】:ASP.NET Core API not accepting null value for a nullable typeASP.NET Core API 不接受可空类型的空值
【发布时间】:2019-03-28 22:28:24
【问题描述】:

我有一个 GET 请求 API 端点,它接收一个带有 Nullable 属性的请求视图模型,如下所示:

public class ModelRequestVM : BaseRequestVM
    {
        #region Properties and Data Members
        public uint ModelId { get; set; }
        public uint? MakeId { get; set; }
        public string MakeName { get; set; }
        public string ModelName { get; set; }
        public uint? ExternalModelId { get; set; }

        #endregion
    }

但是当我使用 null 值对 MakeId 发出 get 请求时,API 不接受此可空类型的 null 值。

这是我的获取请求:https://localhost:44311/api/model/getlist?MakeId=null

我收到以下错误:

The value 'null' is not valid for MakeId.

【问题讨论】:

  • 如果你完全省略它不会收到 null 吗?
  • @AFriend 我实际上希望它获得一些价值,基于它我可以获得所有模型。?

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


【解决方案1】:

MakeId 是一个Nullable<uint>,但查询字符串MakeId=null 中的null 只是一个字符串值,不能被解析为uint。只需从您的请求中省略它以使其为空:

https://localhost:44311/api/model/getlist

如果 makeid 不为空,您可以执行以下操作来包含 makeid:

string url = $"https://localhost:44311/api/model/getlist(makeid == null?"":"?makeid=" + makeid)";

【讨论】:

  • 我实际上希望它获得一些价值,基于它我可以获得所有模型。有没有办法做到这一点?
  • 要为 makeid 发送 null 值,您必须从查询字符串中省略它,让我编辑我的答案以显示如何做到这一点。
  • 我明白这一点。问题是我在一个通用端点中使用它,其中至少有一个值将传递给它。这就是用例
  • 另一方面,可以说有一个像Request.QueryString["makeid"] 这样的代码正在获取您作为makeid 传递的内容,如果您没有名为makeid 的查询字符串参数,那么它的价值是多少? null 就是这样做的,除非 api 将特定字符串映射到 null
  • 除了实际的unit 值之外,我不能将任何值传递给请求,甚至不能为空"" 甚至不仅仅是MakeId=,因为即使在点击方法之前请求也会失败,并且会给我的应用程序逻辑带来麻烦
【解决方案2】:

实际上是接收到字符串“null”,无法转换成uint

如果您省略它,该值将为空。

【讨论】:

  • 我实际上希望它获得一些价值,据此我可以获得所有模型。有没有办法做到这一点?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-29
  • 1970-01-01
  • 2019-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多