public class APIBaseService : Controller
{
private readonly IHttpContextAccessor context;
public APIBaseService(IHttpContextAccessor context)
{
this.context = context;
}
public async Task<IActionResult> InvokeTaskAsync<T>(Func<Task<T>> Process)
{
DateTime InvokeStart = DateTime.Now;
APIResponse response = null;
try
{
var result = await Process();
DateTime InvokeEnd = DateTime.Now;
response = new APIResponse()
{
InvokedBy = context.HttpContext.User.Identity.Name,
InvokeStatus = "OK",
InvokeStart = InvokeStart,
InvokeEnd = InvokeEnd,
Message = "Success",
Payload = result
};
return StatusCode(200, response);
}
catch(Exception e)
{
DateTime InvokeEnd = DateTime.Now;
response = new APIResponse()
{
InvokedBy = context.HttpContext.User.Identity.Name,
InvokeStatus = "ERR",
InvokeStart = InvokeStart,
InvokeEnd = InvokeEnd,
Message = e.Message,
Payload = e.Data
};
return StatusCode(400, response);
}
}
public IActionResult InvokeTask<T>(Func<T> Process)
{
DateTime InvokeStart = DateTime.Now;
APIResponse response = null;
try
{
var result = Process();
DateTime InvokeEnd = DateTime.Now;
response = new APIResponse()
{
InvokedBy = context.HttpContext.User.Identity.Name,
InvokeStatus = "OK",
InvokeStart = InvokeStart,
InvokeEnd = InvokeEnd,
Message = "Success",
Payload = result
};
return StatusCode(200, response);
}
catch(Exception e)
{
DateTime InvokeEnd = DateTime.Now;
response = new APIResponse()
{
InvokedBy = context.HttpContext.User.Identity.Name,
InvokeStatus = "ERR",
InvokeStart = InvokeStart,
InvokeEnd = InvokeEnd,
Message = e.Message,
Payload = e.Data
};
return StatusCode(400, response);
}
}
public bool IsDateValid(string DateStr, out DateTime DateParsed)
{
return DateTime.TryParseExact(DateStr, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateParsed);
}
}
public partial class APIResponse
{
[JsonPropertyName("InvokedBy")]
public string InvokedBy { get; set ;}
[JsonPropertyName("InvokeStatus")]
public string InvokeStatus { get; set; }
[JsonPropertyName("InvokeStart")]
public DateTime InvokeStart { get; set; }
[JsonPropertyName("InvokeEnd")]
public DateTime InvokeEnd { get; set; }
[JsonPropertyName("Message")]
public string Message {get;set;}
[JsonPropertyName("Payload")]
public Object Payload { get; set; }
}
调用
return await APIBase.InvokeTaskAsync<xxx class>(async () => {});
调用前实例化对象,需要把它写到自己的服务,并注入次服务
分享一个.netcore API返回服务,非常好用
最新推荐文章于 2025-02-03 15:02:06 发布
该代码段展示了在ASP.NET Core中如何创建一个基类`APIBaseService`,用于处理异步任务并封装API响应。基类包含两个方法:`InvokeTaskAsync<T>`和`InvokeTask<T>`,分别处理异步和同步操作。当任务成功执行时,返回带有状态码200的响应;当出现异常时,返回状态码400的响应,同时附带异常信息。此外,基类还包含了一个`IsDateValid`方法,用于验证日期字符串的有效性。
6576

被折叠的 条评论
为什么被折叠?



