72 lines
2.5 KiB
C#
72 lines
2.5 KiB
C#
using Microsoft.AspNetCore.Builder;
|
|
using Microsoft.AspNetCore.Hosting;
|
|
using Microsoft.AspNetCore.Http;
|
|
using Microsoft.Extensions.Primitives;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Globalization;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace DOAN.ServiceCore.Middleware
|
|
{
|
|
public class UtcToLocalMiddleware
|
|
{
|
|
private readonly RequestDelegate _next;
|
|
|
|
public UtcToLocalMiddleware(RequestDelegate next)
|
|
{
|
|
_next = next;
|
|
}
|
|
|
|
public async Task InvokeAsync(HttpContext context)
|
|
{
|
|
// 检查是否是GET请求
|
|
if (HttpMethods.IsGet(context.Request.Method))
|
|
{
|
|
var query = context.Request.Query; // 获取查询参数集合
|
|
var queryParams = new List<KeyValuePair<string, StringValues>>();
|
|
|
|
foreach (var queryParameter in query)
|
|
{
|
|
if(queryParameter.Value.Count()>0)
|
|
{
|
|
foreach (var value in queryParameter.Value)
|
|
{
|
|
if (DateTime.TryParse(value,
|
|
CultureInfo.InvariantCulture,
|
|
DateTimeStyles.AssumeUniversal,
|
|
out DateTime utcDate))
|
|
{
|
|
// 转换为本地时间
|
|
var localTime = utcDate.ToLocalTime();
|
|
|
|
queryParams.Add(new KeyValuePair<string, StringValues>(queryParameter.Key, new StringValues(localTime.ToString("o"))));
|
|
}
|
|
else
|
|
{
|
|
// 如果不是时间格式,则保持原样添加
|
|
queryParams.Add(new KeyValuePair<string, StringValues>(queryParameter.Key, new StringValues(value)));
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
// 构建新的 QueryString
|
|
var newQueryString = string.Join("&", queryParams.Select(kv => $"{kv.Key}={Uri.EscapeDataString(kv.Value)}"));
|
|
context.Request.QueryString = new QueryString("?" + newQueryString);
|
|
}
|
|
|
|
// Call the next delegate/middleware in the pipeline
|
|
await _next(context);
|
|
}
|
|
}
|
|
|
|
|
|
}
|