gpt4 book ai didi

c# - Asp.Net-Core - OutputFormatter 将小数结果格式化为两位小数

转载 作者:太空宇宙 更新时间:2023-11-03 12:31:16 24 4
gpt4 key购买 nike

我正在为类的小数类型属性实现自定义输出格式化程序,它应该始终返回两位小数。例如:value = 5 ,则应为 5.00。我在 Asp.net Core 中创建自定义 OutputFormatter,但是,当我为 CanWriteType 应用覆盖时,我的代码方法 (WriteResponseBodyAsync) 永远不会被命中。如果我删除该 CanWriteType 方法,那么它会触发 WriteResponseBodyAsync 方法,但 context.Object 包含所有类,而不仅仅是它的 decimal 属性。

如何使此 OutputFormatter 与响应中的所有小数属性一起使用?任何帮助将不胜感激。

public class CustomDecimalFormatter : OutputFormatter
{
public string ContentType { get; private set; }
public CustomDecimalFormatter(){
ContentType = "application/json";
SupportedMediaTypes.Add(MediaTypeHeaderValue.Parse("application/json"));

}

protected override bool CanWriteType(Type type)
{
return type == typeof(decimal);
}

public override Task WriteResponseBodyAsync(OutputFormatterWriteContext context)
{
var response = context.HttpContext.Response;
var decimalValue = (decimal)context.Object;

var formatted = decimalValue.ToString("F2", CultureInfo.InvariantCulture);

using (var writer = new StreamWriter(writeStream))
{
writer.Write(formatted);
}

return Task.FromResult(0);
}
}

最佳答案

我没有发现您的方法和类代码有任何问题。但是在 OutputFormatters 列表的开头添加您的 CustomDecimalFormatter 将解决问题。为此,在 Startup.cs 的 ConfigureServices 方法中添加这行代码:

services.AddMvc( options => {
options.OutputFormatters.Insert(0,new CustomDecimalFormatter());
});

关于c# - Asp.Net-Core - OutputFormatter 将小数结果格式化为两位小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42657175/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com