我正在为类的十进制类型属性实现自定义输出格式化程序,它应该总是返回两个小数位。 例如:value = 5,那么它应该是5.00。 我在Asp.net Core中创建自定义OutputFormatter,但是,当我为CanWriteType应用覆盖时,我的代码方法(WriteResponseBodyAsync)永远不会被命中。如果我删除了CanWriteType方法,那么它会命中WriteResponseBodyAsync方法,但context.Object包含所有类,而不仅仅包含它的十进制属性。
如何使此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);
}
}
答案 0 :(得分:1)
我的方法和类代码中没有任何问题。但是,在CustomDecimalFormatter
列表的开头添加OutputFormatters
可以解决问题。要实现此目的,请在Startup.cs中的ConfigureServices
方法中添加以下代码:
services.AddMvc( options => {
options.OutputFormatters.Insert(0,new CustomDecimalFormatter());
});