如何在.Net Core rest API响应中显示带两位小数的十进制数据类型

Posted

技术标签:

【中文标题】如何在.Net Core rest API响应中显示带两位小数的十进制数据类型【英文标题】:How to display decimal data type with two decimal place in .Net Core rest API response 【发布时间】:2021-07-05 13:54:19 【问题描述】:

我正在开发 .net core 3.1 (C#) 中的 REST API 项目。我的模型如下。

 public class Transaction 
        [SwaggerSchema("Item code.")]
        [Required]
        [MaxLength(20)]
        public string ItemCode  get; set; 

        /// <example>1</example>
        [SwaggerSchema("Transaction type.")]
        public int TransactionType  get; set; 
        
        /// <example>50</example>
        [SwaggerSchema("Transaction amount.")]
        [Required]       
        [Range(0,int.MaxValue,ErrorMessage ="Amount must be greater than zero.")]  
        public decimal Amount  get; set; 

        /// <example>ABC45345</example>
        [SwaggerSchema("Comment related to the transaction.")]
        [MaxLength(50)]
        public string Comment  get; set; 
 

我使用这个模型 Transaction 对象作为我的 Post 方法的参数。问题是,当用户提供金额为 .9 时,它会失败并出现错误。

此外,存储在 2.00、150.00 等数据库中的值在 GET 调用中显示不带小数位。我的客户希望查看所有小数点后两位的金额。有人可以建议我们是否可以通过其他方式处理此十进制数据类型以接受 .77(不带前导零)并显示两个小数点,无论该值是否有小数位?

我们可以使用字符串数据类型来管理它,但我不想从十进制更改数据类型。请指教。

【问题讨论】:

您是否尝试添加注释[DisplayFormat(DataFormatString = "0.0")] 是的,@Steve。我已经试过了,输出没有效果。 Api 提供 json 响应。使用 json 的人应该在 UI 端以他们想要的任何格式显示它。格式化不是 api 的工作。 【参考方案1】:

在不更改数据类型的情况下,我没有看到任何处理此问题的方法。我改变了我的代码如下

private string _amount;
[SwaggerSchema("Transaction amount.")]
    [Required]
    public string Amount
    
        get => _amount;
        set => _amount = decimal.Parse(value, NumberStyles.AllowDecimalPoint,
            new CultureInfo("en-US")).ToString("F2");
    

【讨论】:

以上是关于如何在.Net Core rest API响应中显示带两位小数的十进制数据类型的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core Refit Client for RESTful API:如何划分客户端

用ASP.NET Core 2.0 建立规范的 REST API -- 预备知识

.NET Core:从 API JSON 响应中删除空字段

创建一个 .NET Core Rest API 应用程序以支持来自应用程序的不同数据库

从 .NET Core 应用程序同时提供 REST 和 GraphQL API

如何通过 ASP.NET Core 3 中的中间 Web API 传递未更改的 HTTP 响应?