带有枚举输入参数的 Webapi post 方法

2024-03-02

当尝试调用采用枚举作为输入参数的 Web API 方法时,为什么会出现下面屏幕截图中的错误?我该如何解决这个问题?

看起来像messageDestinationType无论我做什么始终为空......

我更愿意将输入类型保留为枚举。我对使用 Web api 很陌生,无法理解当 WCF 完美处理这种情况时,这怎么会如此困难

[JsonConverter(typeof(StringEnumConverter))]    
public enum MessageDestinationType
{
    None = 0,
    [EnumMember(Value = "SMS")]
    SMS = 1,
    [EnumMember(Value = "Email")]
    Email = 2,
    PushNotification = 3,
    UXP = 4,
    IntermediaryApp = 5,
    YouthApp = 6
}



    [HttpPost, Route("ReadClientMessagesC")]
    public IHttpActionResult ReadClientMessagesC([FromBody]MessageDestinationType messageDestinationType)
    {
        var request = new ClientInboxRequest
        {
            Gcn = Gcn,
            ClientIpAddress = ClientIpAddress,
            CallingApplication = CallingApplication.Name,
            CallingApplicationVersion = CallingApplication.Version,
            CookieString = CookieString,
            HasPbUk = HasPbUk,
            HasIamIms = HasIamIms,
            HasPbZa = HasPbZa,
            HasSps = HasSps,
            HasWiUk = HasWiUk,
            HasWiZa = HasWiZa,
            LinkedGcns = LinkedGcns,
            RequestId = RequestId.ToString(),
            SsoProfiles = SsoProfiles.Select(x => x.Name).ToList()
        };

        MessageDestinationType messageDestination = (MessageDestinationType)messageDestinationType;

        return Ok(ClientMessageCenterHelper.ReadClientMessagesA(Gcn, messageDestination, request));
    }

错误信息: { "Message": "请求无效。", "MessageDetail": "参数字典包含方法 'System.Web.Http.IHttpActionResult ReadClientMessagesC(API.Domain.ClientMessageCenter.MessageDestinationType' 的不可空类型 'API.Domain.ClientMessageCenter.MessageDestinationType' 的参数 'messageDestinationType' 的空条目)' in 'ID.ClientMessageCenter.Controllers.ClientMessageCenterController'。可选参数必须是引用类型、可为 null 的类型,或者声明为可选参数。” }


您可以发送一个字符串(字符串名称enum)到 Web API 控制器(即使它具有类似于 OP 示例中的数值)。 ASP.NET 框架已经提供了自动进行此转换的规定 - 您只需启用它即可。

In your Startup.cs ConfigureServices方法,将您的转换器添加到JsonSerializerOptions.Converters财产。

services.AddControllers()
    .AddJsonOptions(opts =>
    {
        opts.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
        opts.JsonSerializerOptions.IgnoreNullValues = true;
    });

我还建议设置IgnoreNullValues以及您的偏好设置,使其非常明确。

Credit: 我解决了我的问题这个帖子 https://gist.github.com/regisdiogo/27f62ef83a804668eb0d9d0f63989e3e (by 雷吉斯迪奥戈 https://gist.github.com/regisdiogo)并无耻地将其复制到这里:-)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带有枚举输入参数的 Webapi post 方法 的相关文章

随机推荐

  • Microsoft VB.NET 命名约定

    VB NET 有标准命名约定吗 根据您的编程经验 想分享您对 VB NET 的命名约定吗 除了这种良好实践之外 还有任何指南吗 模式与实践 http www codeplex com Wiki View aspx ProjectName g
  • kubectl 端口转发和 NodePort 服务之间的区别

    kubectl port forwarding 将端口从本地主机转发到集群中的 pod 以获取对集群资源的访问权限 和 NodePort 服务类型之间有什么区别 您正在比较两个完全不同的事物 你应该compare https medium
  • 添加 google-play-services 后,您需要在此活动中使用 Theme.AppCompat 主题(或后代)

    在我目前正在开发的应用程序中 这是我的第一个 Android 应用程序 我使用 android maven plugin 和 maven android sdk deployer 应用程序一直运行良好 使用 ActionBarActivit
  • 类型类是必需的吗?

    我曾经问过一个问题哈斯克尔初学者 https groups google com forum topic haskell cafe C1zGMkYGTOY 是否使用 data newtype 还是类型类 在我的特殊情况下 事实证明不需要类型
  • Windows 上的 XNA 网络

    XNA 的内置网络功能有哪些 是否可以在Windows中使用XNA的内置网络 如果可以的话 有什么限制吗 如果您使用Microsoft Xna Framework Net 命名空间 http msdn microsoft com en us
  • Gem::Specification.reset 期间未解决的规范:

    启动 Guard 时 我得到以下输出 guard WARN Unresolved specs during Gem Specification reset lumberjack gt 1 0 2 ffi gt 0 5 0 WARN Clea
  • 重塑矩阵并将其转换为数据框,跟踪原始行和列索引

    我有一个大的 n m 矩阵 我想将其转换为 n m 3 数据框 我的矩阵类似于 1400 800 数据框的第一列应包含矩阵行索引 第二列应包含矩阵列索引 数据框的第三列应包含矩阵中每个单元格的值 我用 for 循环解决了这个问题 但我认为这
  • 访问 iText 中的 OpenType 字形变体

    在 iText 中使用 OpenType 字体构建 PDF 文档时 我想从字体内访问字形变体 特别是表格数字 由于 OpenType 字形变体没有 Unicode 索引 因此我不确定如何指定我想要使用一组特定的变体 表格数字 或通过其字形
  • iOS - 架构armv7的2个重复符号

    我在用Resty http projects lukeredpath co uk resty 在我的项目中的任何地方 但现在由于我必须将图像上传到服务器 所以我尝试添加另一个名为RestKit http restkit org 处理文件上传
  • Facebook JavaScript SDK 不适用于 Chrome 扩展

    我正在写一个 chrome 扩展 该扩展的功能包括 Facebook 登录 该扩展不支持外部 JavaScript 链接 因此我必须在扩展的清单文件中创建 content security policy 现在可以了 正在加载Facebook
  • 读取 strcpy() 返回值上的字符串字符时出错

    我尝试打印出strcpy 的返回值 https stackoverflow com questions 3561427 strcpy return value它给了我一个 访问冲突读取位置 异常 char ind 15 printf s n
  • 如何将单独的 int 值转换为十六进制字节数组

    我需要做一些 对我来说新的 int hex byte 工作 并且我正在努力使其正确 另一端的 tcp 服务器需要 Little Endian 我需要发送一个由十六进制值组成的字节数组 6000需要发送为 0x70 0x17 19需要发送为
  • Android Instant App - Play 控制台发布/部署错误且 DAL(数字资产链接)未链接

    我试图弄清楚为什么游戏商店不接受我的即时应用程序构建 我已经成功部署了Alpha定期向测试人员发布应用程序 因为这是发布即时应用程序的先决条件 我正在尝试部署一个发展发布即时应用程序 我究竟做错了什么 我尝试添加尽可能多的细节 我是否需要使
  • 在对象释放和垃圾回收之后,Java 仍然使用系统内存

    我正在运行 JVM 1 5 0 Mac OS X 默认 并且我正在活动监视器中监视我的 Java 程序 我有以下内容 import java io BufferedReader import java io IOException impo
  • Erlang 可以使用哪些分布式进程注册表?

    我想为 Erlang 编译一个相当完整的分布式进程注册表库列表 此类库需要支持基本操作 例如register name Pid Name and whereis name Name 并且理想情况下registered names 0 名称不
  • 对布尔键进行 DynamoDB 查询

    我是 DynamoDB 以及一般的 noSQL 新手 并且在理解一些概念方面遇到了一些困难 特别是一件事给我带来了一些问题 即基于布尔键查询表 我意识到我无法在布尔键上创建主索引或辅助索引 但我不知道理想情况下应该如何对具有以下结构的表进行
  • c/c++ 左移无符号 vs 有符号

    我有这个代码 include
  • 为一个别名加载 Java KeyStore?

    有谁知道是否可以加载密钥库 以便仅提示输入给定别名的密码 Example 在我的密钥存储中 我有两个私钥 Alice 的加密证书和 Bob 的加密证书 当我加载我的密钥存储时 keyStore KeyStore getInstance Wi
  • 如何创建私有远程perforce分支并推送到它?

    熟悉git 第一次使用perforce 我正在开发自己的功能 我不想将其推送到主线远程存储库 我需要类似 git 远程分支的东西 其中 我可以提交我的更改 就像是git commit 我可以推送到不合并的远程私有分支 就像是git push
  • 带有枚举输入参数的 Webapi post 方法

    当尝试调用采用枚举作为输入参数的 Web API 方法时 为什么会出现下面屏幕截图中的错误 我该如何解决这个问题 看起来像messageDestinationType无论我做什么始终为空 我更愿意将输入类型保留为枚举 我对使用 Web ap