.Net Core 给WebApi接口返回值添加全局的日期格式化
时间: 2024-03-06 13:49:40 浏览: 130
在 .Net Core 中,你可以通过实现一个继承自 `ActionFilterAttribute` 的过滤器来实现全局的日期格式化。具体步骤如下:
1. 创建一个继承自 `ActionFilterAttribute` 的过滤器类,比如 `DateFormatFilter`。
```csharp
public class DateFormatFilter : ActionFilterAttribute
{
private readonly string _format;
public DateFormatFilter(string format)
{
_format = format;
}
public override void OnResultExecuting(ResultExecutingContext context)
{
if (context.Result is ObjectResult objectResult)
{
objectResult.Value = HandleObject(objectResult.Value);
}
else if (context.Result is JsonResult jsonResult)
{
jsonResult.Value = HandleObject(jsonResult.Value);
}
else if (context.Result is ContentResult contentResult)
{
contentResult.Content = HandleContent(contentResult.Content);
}
base.OnResultExecuting(context);
}
private object HandleObject(object obj)
{
if (obj == null)
{
return null;
}
var objectType = obj.GetType();
if (objectType.IsValueType || objectType == typeof(string))
{
return obj;
}
var properties = objectType.GetProperties();
foreach (var property in properties)
{
if (property.PropertyType == typeof(DateTime) || property.PropertyType == typeof(DateTime?))
{
var value = property.GetValue(obj);
if (value != null)
{
var dateTime = (DateTime)value;
property.SetValue(obj, dateTime.ToString(_format));
}
}
}
return obj;
}
private string HandleContent(string content)
{
// TODO: 处理 ContentResult 的内容
return content;
}
}
```
2. 在 `Startup.cs` 文件中注册过滤器。
```csharp
public void ConfigureServices(IServiceCollection services)
{
// 注册全局日期格式化过滤器
services.AddMvc(options =>
{
options.Filters.Add(new DateFormatFilter("yyyy-MM-dd HH:mm:ss"));
});
}
```
这样,无论你的 WebApi 返回的数据是 JSON、XML 还是纯文本,都会按照指定的日期格式进行格式化。
阅读全文